poetry: Inclusion of git dependency causes poetry to TypeError
-
I am on the latest Poetry version.
-
I have searched the issues of this repo and believe that this is not a duplicate.
-
If an exception occurs when executing a command, I executed it again in debug mode (
-vvvoption). -
OS version and name: Debian bullseye/sid
-
Poetry version: Poetry version 1.1.4
-
Link of a Gist with the contents of your pyproject.toml file: https://gist.github.com/hlieberman/3057f3b572355cc6699cc44bdf352979
Issue
It’s possible this is related to the now-closed issue #2027, but the solutions listed in that issue don’t appear to be applicable in this situation (there are no .egg-info files involved).
After adding a git repository dependency to my project, all poetry commands involving dependency resolution now fail with a TypeError expected string or bytes-like object from poetry.helpers.canonicalize_name.
poetry show, poetry install, and poetry update all cause these errors. The project is essentially barren; there’s no actual code put down yet, so it should be relatively simple to replicate.
Exception output:
Using virtualenv: /home/hlieberman/.cache/pypoetry/virtualenvs/renspell-yOBpFtFN-py3.8
Stack trace:
17 ~/.local/lib/python3.8/site-packages/clikit/console_application.py:131 in run
129│ parsed_args = resolved_command.args
130│
→ 131│ status_code = command.handle(parsed_args, io)
132│ except KeyboardInterrupt:
133│ status_code = 1
16 ~/.local/lib/python3.8/site-packages/clikit/api/command/command.py:120 in handle
118│ def handle(self, args, io): # type: (Args, IO) -> int
119│ try:
→ 120│ status_code = self._do_handle(args, io)
121│ except KeyboardInterrupt:
122│ if io.is_debug():
15 ~/.local/lib/python3.8/site-packages/clikit/api/command/command.py:171 in _do_handle
169│ handler_method = self._config.handler_method
170│
→ 171│ return getattr(handler, handler_method)(args, io, self)
172│
173│ def __repr__(self): # type: () -> str
14 ~/.local/lib/python3.8/site-packages/cleo/commands/command.py:92 in wrap_handle
90│ self._command = command
91│
→ 92│ return self.handle()
93│
94│ def handle(self): # type: () -> Optional[int]
13 ~/.local/lib/python3.8/site-packages/poetry/console/commands/show.py:82 in handle
80│ solver.provider.load_deferred(False)
81│ with solver.use_environment(self.env):
→ 82│ ops = solver.solve()
83│
84│ required_locked_packages = set([op.package for op in ops if not op.skipped])
12 ~/.local/lib/python3.8/site-packages/poetry/puzzle/solver.py:65 in solve
63│ with self._provider.progress():
64│ start = time.time()
→ 65│ packages, depths = self._solve(use_latest=use_latest)
66│ end = time.time()
67│
11 ~/.local/lib/python3.8/site-packages/poetry/puzzle/solver.py:233 in _solve
231│
232│ try:
→ 233│ result = resolve_version(
234│ self._package, self._provider, locked=locked, use_latest=use_latest
235│ )
10 ~/.local/lib/python3.8/site-packages/poetry/mixology/__init__.py:7 in resolve_version
5│ solver = VersionSolver(root, provider, locked=locked, use_latest=use_latest)
6│
→ 7│ return solver.solve()
8│
9 ~/.local/lib/python3.8/site-packages/poetry/mixology/version_solver.py:84 in solve
82│ while next is not None:
83│ self._propagate(next)
→ 84│ next = self._choose_package_version()
85│
86│ return self._result()
8 ~/.local/lib/python3.8/site-packages/poetry/mixology/version_solver.py:374 in _choose_package_version
372│ if locked is None or not dependency.constraint.allows(locked.version):
373│ try:
→ 374│ packages = self._provider.search_for(dependency)
375│ except ValueError as e:
376│ self._add_incompatibility(
7 ~/.local/lib/python3.8/site-packages/poetry/puzzle/provider.py:131 in search_for
129│
130│ if dependency.is_vcs():
→ 131│ packages = self.search_for_vcs(dependency)
132│ elif dependency.is_file():
133│ packages = self.search_for_file(dependency)
6 ~/.local/lib/python3.8/site-packages/poetry/puzzle/provider.py:163 in search_for_vcs
161│ return [self._deferred_cache[dependency]]
162│
→ 163│ package = self.get_package_from_vcs(
164│ dependency.vcs,
165│ dependency.source,
5 ~/.local/lib/python3.8/site-packages/poetry/puzzle/provider.py:202 in get_package_from_vcs
200│ revision = git.rev_parse(reference, tmp_dir).strip()
201│
→ 202│ package = cls.get_package_from_directory(tmp_dir, name=name)
203│ package._source_type = "git"
204│ package._source_url = url
4 ~/.local/lib/python3.8/site-packages/poetry/puzzle/provider.py:285 in get_package_from_directory
283│ cls, directory, name=None
284│ ): # type: (Path, Optional[str]) -> Package
→ 285│ package = PackageInfo.from_directory(path=directory).to_package(
286│ root_dir=directory
287│ )
3 ~/.local/lib/python3.8/site-packages/poetry/inspection/info.py:147 in to_package
145│ )
146│
→ 147│ package = Package(
148│ name=name,
149│ version=self.version,
2 ~/.local/lib/python3.8/site-packages/poetry/core/packages/package.py:51 in __init__
49│ Creates a new in memory package.
50│ """
→ 51│ super(Package, self).__init__(
52│ name,
53│ source_type=source_type,
1 ~/.local/lib/python3.8/site-packages/poetry/core/packages/specification.py:19 in __init__
17│ ): # type: (str, Optional[str], Optional[str], Optional[str], Optional[str], Optional[List[str]]) -> None
18│ self._pretty_name = name
→ 19│ self._name = canonicalize_name(name)
20│ self._source_type = source_type
21│ self._source_url = source_url
TypeError
expected string or bytes-like object
at ~/.local/lib/python3.8/site-packages/poetry/core/utils/helpers.py:24 in canonicalize_name
20│ _canonicalize_regex = re.compile("[-_]+")
21│
22│
23│ def canonicalize_name(name): # type: (str) -> str
→ 24│ return _canonicalize_regex.sub("-", name).lower()
25│
26│
27│ def module_name(name): # type: (str) -> str
28│ return canonicalize_name(name).replace(".", "_").replace("-", "_")
About this issue
- Original URL
- State: closed
- Created 4 years ago
- Reactions: 16
- Comments: 19 (6 by maintainers)
I’m using an empty environment (after
poetry init) and thenpoetry add git+https://github.com/353solutions/storeywhich reproduces the bug.pipon the other hand manages to install this dependency.Hello from January of 2021. Same issue appears after updating whole bunch of dependencies. No way to find “why”