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 (
-vvv
option). -
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/storey
which reproduces the bug.pip
on 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”