如果
requirements.txt
通过 git+https
包含私人回购包,并且该包裹包含一个 git+https
到另一个私人回购包,则第二个 git+https
无法识别。
这是我在
pip3 install -r requirements.txt
项目中运行Client
时的错误:
Expected end or semicolon (after name and no valid version specifier)
完整错误:
Resolved https://x-token-auth:****@bitbucket.org/name/library1.git
Installing build dependencies ... done
Getting requirements to build wheel ... error
error: subprocess-exited-with-error
× Getting requirements to build wheel did not run successfully.
│ exit code: 1
╰─> [66 lines of output]
/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/config/pyprojecttoml.py:66: _BetaConfiguration: Support for `[tool.setuptools]` in `pyproject.toml` is still *beta*.
config = read_configuration(filepath, True, ignore_option_errors, dist)
/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/config/expand.py:132: SetuptoolsWarning: File '/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-req-build-2kfhkxk4/README.md' cannot be found
return '\n'.join(
Traceback (most recent call last):
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/requirements.py", line 35, in __init__
parsed = parse_requirement(requirement_string)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/_parser.py", line 64, in parse_requirement
return _parse_requirement(Tokenizer(source, rules=DEFAULT_RULES))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/_parser.py", line 82, in _parse_requirement
url, specifier, marker = _parse_requirement_details(tokenizer)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/_parser.py", line 126, in _parse_requirement_details
marker = _parse_requirement_marker(
^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/_parser.py", line 147, in _parse_requirement_marker
tokenizer.raise_syntax_error(
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/_tokenizer.py", line 163, in raise_syntax_error
raise ParserSyntaxError(
setuptools.extern.packaging._tokenizer.ParserSyntaxError: Expected end or semicolon (after name and no valid version specifier)
git+https://x-token-auth:****@bitbucket.org/name/library2.git
^
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/Users/username/src/testnestedreq/client/venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in <module>
main()
File "/Users/username/src/testnestedreq/client/venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
json_out['return_val'] = hook(**hook_input['kwargs'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/username/src/testnestedreq/client/venv/lib/python3.11/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 118, in get_requires_for_build_wheel
return hook(config_settings)
^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 341, in get_requires_for_build_wheel
return self._get_build_requires(config_settings, requirements=['wheel'])
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 323, in _get_build_requires
self.run_setup()
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/build_meta.py", line 338, in run_setup
exec(code, locals())
File "<string>", line 4, in <module>
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/__init__.py", line 107, in setup
return distutils.core.setup(**attrs)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_distutils/core.py", line 159, in setup
dist.parse_config_files()
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 908, in parse_config_files
pyprojecttoml.apply_configuration(self, filename, ignore_option_errors)
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/config/pyprojecttoml.py", line 67, in apply_configuration
return _apply(dist, config, filepath)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py", line 49, in apply
dist._finalize_requires()
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 607, in _finalize_requires
self._move_install_requirements_markers()
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/dist.py", line 647, in _move_install_requirements_markers
inst_reqs = list(_reqs.parse(spec_inst_reqs))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/private/var/folders/r3/g2zzxbp952qcpf7z4tlzrsvc0000gn/T/pip-build-env-yejy0smn/overlay/lib/python3.11/site-packages/setuptools/_vendor/packaging/requirements.py", line 37, in __init__
raise InvalidRequirement(str(e)) from e
setuptools.extern.packaging.requirements.InvalidRequirement: Expected end or semicolon (after name and no valid version specifier)
git+https://x-token-auth:****@bitbucket.org/name/library2.git
^
[end of output]
note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error
为了演示这个问题,我有 3 个项目:
Client
:包括对Library1
Library1
:包括对Library2
Library2
:做东西Client
requirements.txt
:
python-dotenv==1.0.0
git+https://x-token-auth:****@bitbucket.org/name/library1.git@main
Library1
requirements.txt
:
python-dotenv==1.0.0
git+https://x-token-auth:****@bitbucket.org/name/library2.git@main
Library2 requirements.txt
:
python-dotenv==1.0.0
环境:
python3 -m venv venv
和source venv/bin/activate
试过这些东西:
pip3 install -r requirements.txt
项目运行 Library1
,那么它工作正常。Library2
中删除Library1
依赖然后它通过错误(但我不能使用Library2
)Library2
添加到Client
的requirements.txt
那么一切都很好。但这并不理想,因为它需要 Client
明确知道 Library1
的依赖关系我怎样才能让这个场景起作用?