use*_*774 4 python pip setuptools
我正在尝试在离线环境中从源安装 SQLACodegen 包及其依赖项(inflect、setuptools-scm)。具体来说,我在 Red Hat Enterprise Linux 7 系统上使用 Python 3.8 安装了 Anaconda 2020.07。
我将 Anaconda bin 目录添加到 PATH 之前,并使用python -m pip install whatever.tar.gz. 是的,我知道这样pip使用是一种罪过。conda碰巧这是安装上游软件包时更简单的方法,而且我之前在安装许多其他软件包时从未遇到过问题。
问题是 pip 正在尝试到互联网上下载并安装setuptools。奇怪的是 setuptools 已经安装并且满足包的版本要求。即使我指定了诸如 之类的 pip 标志--no-index -f /path/to/packages,它仍然无法检测到已安装的 setuptools 并尝试从某个地方提取它。
输出示例:
[root@myserver stuff]# ls
inflect-4.1.0.tar.gz setuptools_scm-4.1.2.tar.gz sqlacodegen-2.1.0.tar.gz
[root@myserver stuff]# which python
/usr/local/anaconda-2020.07/bin/python
[root@myserver stuff]# python -V
Python 3.8.3
[root@myserver stuff]# python -m pip list | grep setuptools
setuptools 49.2.0.post20200714
[root@myserver stuff]# python -m pip install --no-index -f . sqlacodegen-2.1.0.tar.gz
Looking in links: .
Processing ./sqlacodegen-2.1.0.tar.gz
Installing build dependencies ... error
ERROR: Command errored out with exit status 1:
command: /usr/local/anaconda-2020.07/bin/python /usr/local/anaconda-2020.07/lib/python3.8/site-packages/pip install --ignore-installed --no-user --prefix /tmp/pip-build-env/r61p50oe/overlay --no-warn-script-location --no-binary :none: --only-binary :none: --no-index --find-links . -- 'setuptools >= 36.2.7' wheel 'setuptools_scm >= 1.7.0'
cwd: None
Complete output (3 lines):
Looking in links: .
ERROR: Could not find a version that satisfies the requirement setuptools>=36.2.7 (from versions: none)
ERROR: No matching distribution found for setuptools>=36.2.7
Run Code Online (Sandbox Code Playgroud)
我有一种感觉,该--ignore-installed标志可能是问题的一部分,但我不知道如何覆盖它,它看起来像 pip 本身就包含了许多选项。有谁遇到过类似的情况并解决了吗?
从源代码安装时,您需要添加该install选项--no-build-isolation,并且希望告诉 Pip 使用已安装的软件包来满足构建依赖项。重视构建依赖关系。
根据PEP 518,最常见的构建依赖项是setuptools和wheel。以至于,作为“构建系统执行的最低要求”,构建工具应该将它们默认添加到构建配置中。
从源安装新包时,就构建依赖关系而言,Python 环境中的包将被忽略。正如Pip 文档所解释的:
\n\n\n当构建需求可用时,pip 在隔离环境中进行。也就是说,pip 不会将这些要求安装到 user\xe2\x80\x99s 中
\nsite-packages,而是将它们安装在临时目录中,并sys.path在构建期间将其添加到 user\xe2\x80\x99s 中。这确保了构建需求的处理独立于 user\xe2\x80\x99s 运行时环境。例如,即使用户安装了旧版本(并且无需静默替换该版本),仍然可以安装需要最新版本的 setuptools 来构建的项目。
(该文档已被更新和重新措辞,请参阅“构建过程”部分,并且不再明确提及site-packages将被忽略,尽管这仍然是暗示的。)
在您的示例中,该临时目录似乎是/tmp/pip-build-env/r61p50oe. 除了该选项之外,您还可以将和--no-build-isolation的源包(可能更多,具体取决于您要安装的包)添加到通过/选项指定的本地文件夹中。setuptoolswheel-f--find-links
| 归档时间: |
|
| 查看次数: |
2106 次 |
| 最近记录: |