Pipfile support
eblume opened this issue · comments
- Thanks version: 0.0.7
- Python version: 3.6.2
- Operating System: Linux ... 4.10.0-38-generic #42~16.04.1-Ubuntu SMP Tue Oct 10 16:32:20 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
Description
I'd like to be able to run thanks
on Pipfile, as I do not have a requirements.txt
and track that in Pipfile
instead. The documentation for Pipfile is at: https://github.com/pypa/pipfile
What I Did
$ thanks Pipfile
Loading data about contributors...
Traceback (most recent call last):
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/bin/thanks", line 11, in <module>
sys.exit(main())
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/thanks/cli.py", line 14, in main
Thanks(debug=debug).find_package_roles(requirements)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/thanks/thanks.py", line 29, in __init__
for package in pip.get_installed_distributions():
AttributeError: module 'pip' has no attribute 'get_installed_distributions'
The above error is actually caused by having pip==10.0.1
. I'll file that separately.
The actual error is:
└> thanks Pipfile
Loading data about contributors...
Scanning your requirements file...
Traceback (most recent call last):
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 90, in __init__
req = REQUIREMENT.parseString(requirement_string)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 1617, in parseString
raise exc
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 1607, in parseString
loc, tokens = self._parse( instring, 0 )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 3376, in parseImpl
loc, exprtokens = e._parse( instring, loc, doActions )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 3698, in parseImpl
return self.expr._parse( instring, loc, doActions, callPreParse=False )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 1379, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 3359, in parseImpl
loc, resultlist = self.exprs[0]._parse( instring, loc, doActions, callPreParse=False )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 1383, in _parseNoCache
loc,tokens = self.parseImpl( instring, preloc, doActions )
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/pyparsing.py", line 2670, in parseImpl
raise ParseException(instring, loc, self.errmsg, self)
pkg_resources._vendor.pyparsing.ParseException: Expected W:(abcd...) (at char 0), (line:1, col:1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2942, in __init__
super(Requirement, self).__init__(requirement_string)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/_vendor/packaging/requirements.py", line 94, in __init__
requirement_string[e.loc:e.loc + 8]))
pkg_resources.extern.packaging.requirements.InvalidRequirement: Invalid requirement, parse error at "'[[source'"
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/bin/thanks", line 11, in <module>
sys.exit(main())
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 722, in __call__
return self.main(*args, **kwargs)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 697, in main
rv = self.invoke(ctx)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 895, in invoke
return ctx.invoke(self.callback, **ctx.params)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/click/core.py", line 535, in invoke
return callback(*args, **kwargs)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/thanks/cli.py", line 14, in main
Thanks(debug=debug).find_package_roles(requirements)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/thanks/thanks.py", line 35, in find_package_roles
for req in requirements.parse(reqs):
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/requirements/parser.py", line 50, in parse
yield Requirement.parse(line)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/requirements/requirement.py", line 220, in parse
return cls.parse_line(line)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/requirements/requirement.py", line 198, in parse_line
pkg_req = Req.parse(line)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2988, in parse
req, = parse_requirements(s)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2935, in parse_requirements
yield Requirement(line)
File "/home/erich/.local/share/virtualenvs/hermes-1m2DSN2C/lib/python3.6/site-packages/pkg_resources/__init__.py", line 2944, in __init__
raise RequirementParseError(str(e))
pkg_resources.RequirementParseError: Invalid requirement, parse error at "'[[source'"
We're moving away from using the internal pip api altogether, and instead going with shelling out to pip list --format json
. I mention this because we probably want to do something similar with pipenv.
I will happily welcome PRs that do the "right thing" with pipenv parsing.