首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在脱机环境中安装Python包没有找到已安装的依赖项。

在脱机环境中安装Python包没有找到已安装的依赖项。
EN

Stack Overflow用户
提问于 2021-05-18 22:11:08
回答 1查看 955关注 0票数 3

我试图在离线环境中从源代码安装SQLACodegen包及其依赖项(inflect、setuptools-scm)。具体来说,我在RedHatEnterpriseLinux7系统上使用Python3.8安装了一个Anaconda 2020.07。

我将Anaconda目录放在PATH前面,并使用python -m pip install whatever.tar.gz进行安装。是的,我知道像这样在conda上使用conda是一种罪恶。在安装上游软件包时,这是一种更简单的方法,而我以前从未遇到过安装许多其他软件包的问题。

问题在于,pip正试图到互联网上下载并安装setuptools。奇怪的是,setuptools已经安装并满足了包的版本要求。即使我指定了pip标志(如--no-index -f /path/to/packages ),它仍然无法检测已安装的setuptools并尝试从某个地方提取它。

示例输出:

代码语言:javascript
运行
复制
[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

我感觉到--ignore-installed标志可能是问题的一部分,但我不知道如何覆盖它,它看起来就像pip本身对许多选项的轻拍。有人遇到过类似的情况并解决了吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-18 23:59:47

在从源代码安装时,您需要添加install选项--no-build-isolation,并且希望告诉Pip使用已经安装的包来满足构建依赖关系。强调构建依赖关系。

佩普518认为,最常见的构建依赖关系是setuptoolswheel。因此,作为“构建系统执行的最低要求”,构建工具应该默认地将它们添加到构建配置中。

在从源代码安装新包时,对于构建依赖关系,Python环境中的包将被忽略。作为Pip文档解释

当使构建需求可用时,pip会在一个孤立的环境中这样做。也就是说,pip不将这些需求安装到用户的site-packages中,而是将它们安装在临时目录中,在构建过程中将临时目录添加到用户的sys.path中。这可以确保独立于用户的运行时环境来处理构建需求。例如,即使用户安装了较早的版本(并且无需静默地替换该版本),仍然可以安装需要最近版本的setuptools来构建的项目。

(文档已经更新并重新措辞,请参阅构建过程部分,不再显式地提到site-packages将被忽略,尽管这仍然是隐含的。)

在您的示例中,该临时目录似乎是/tmp/pip-build-env/r61p50oe。除了--no-build-isolation选项之外,还可以将setuptoolswheel的源包(可能更多,取决于要安装的包)添加到通过-f/--find-links选项指定的本地文件夹中。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67594547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档