【问题标题】:Troubles while installing psutil (wheel) as a dependency via pip通过 pip 将 psutil (wheel) 作为依赖项安装时出现问题
【发布时间】:2016-09-15 15:13:25
【问题描述】:

我写了一个依赖于psutil的包(my-package依赖于third-party-package,而third-party-package依赖于psutil)。
由于它应该在没有任何连接且没有gcc 的服务器上运行,因此我使用psutil python platform wheelpip install my-package --download 在本地准备了部署,然后将所有内容发送到服务器上。

现在服务器上的一切都准备好了,但是由于某种原因,当我运行安装时,pip 拒绝安装 psutil。请注意,服务器是运行 pip 7.1.0、virtualenv1.10.1 和 python 2.7.5 的 red hat 7.2(我无法更改任何版本)。

$ pip install /tmp/python_packages/my-package-1.4.zip --no-index 
  --find-links /tmp/python_packages/ --use-wheel
Ignoring indexes: https://pypi.python.org/simple/

# blablabla, everything goes fine, then

Downloading/unpacking psutil (from third-party-package>=0.9->my-package==1.4)
  Could not find any downloads that satisfy the requirement psutil 
  (from third-party-package>=0.9->my-package==1.4)
Cleaning up...
No distributions at all found for psutil (from third-party-package>=0.9->my-package==1.4)
Storing complete log in /home/anto/.pip/pip.log

pip.log 是这样说的:

Downloading/unpacking psutil (from third-party-package>=0.9->my-package==1.4)

  URLs to search for versions for psutil (from third-party-package>=0.9->my-package==1.4):
  # bla
  Skipping file:///tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
    because it is not compatible with this Python
  # bla
  Could not find any downloads that satisfy the requirement psutil (from third-
   party-package>=0.9->my-package==1.4)

Cleaning up...

所以“与此 Python 不兼容”,好吧。但这里是真正奇怪的部分:如果我安装 psutil 而不安装其他任何东西,然后其他的,一切都会好起来的。

$ pip install /tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
Unpacking /tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl
Installing collected packages: psutil
Successfully installed psutil
Cleaning up...
$ pip freeze -l
psutil==4.2.0
$ pip install /tmp/python_packages/my-package-1.4.zip --no-index 
  --find-links /tmp/python_packages/ --use-wheel

# blablabla

Successfully installed my-package third-party-package
Cleaning up...

我错过了什么?有什么线索吗?

【问题讨论】:

  • 什么是第三方包?
  • 这是我公司内部某人开发的一个包。 setup.py 包含install_requires = ['psutil'];没什么花哨的。
  • 不确定您是否有多个 python 版本,但在 pip.log 中验证在这两种情况下使用的 python 是正确的版本? (stackoverflow.com/questions/29879504/…) 不相信这是你的问题,但这是一个开始。另一方面,你为什么还在 2.7.5 上?最新的是 2.7.11。
  • 另外,看起来你的 psutil 是 64 位的,也许这是问题的一部分?
  • 您好,感谢您的建议。我认为系统和pip上的python版本是一致的,但我会仔细检查。我没有使用最新的 python,因为该服务器附带 2.7.5,我坚持使用它。 psutil 的轮子是 64 位的,因为虚拟机是 64 位的(但也许它确实与根本原因有关?)

标签: python python-2.7 pip python-wheel psutil


【解决方案1】:

确保您用于创建轮子的轮子版本与部署期间使用的版本相同。

我在尝试部署使用 0.29.0 构建的轮子时遇到了同样的问题,使用轮子 0.24.0。

我将用于构建轮子的轮子版本降级以匹配部署期间使用的版本,这解决了问题。

【讨论】:

    【解决方案2】:

    您面临的关键问题是恕我直言:

    Skipping file:///tmp/python_packages/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 
    because it is not compatible with this Python
    

    最近在 pip 中引入了一项新功能以支持“许多 linux”轮子(请参阅此 PEP

    当要求直接安装 wheel 时,会进行最少的检查,并且 pip 会假定您确实想要安装它。

    在您的情况下,当轮子作为 dep 的 dep 间接安装时,在这种情况下可能存在不兼容的标签。

    我会确保我使用最新版本的 pip、setuptools 和 virtualenv 来移除移动部件,它可能会解决您的问题。

    模糊相关,如果这有帮助,我使用 this scriptLinux/MacWindows 包装器来执行供应商 pip 包的一致安装。关键是要供应所有东西,这可能是您失败的另一个原因。

    【讨论】:

      【解决方案3】:

      从您的回答看来,您似乎可以通过额外的步骤来解决问题。

      在进行离线安装时,您需要明确告诉它在哪里可以找到您要安装的所有软件包,而不仅仅是顶层。

      我个人一直明确指出您正在查看文件这一事实,并且与任何其他 pip 安装一样,您可以在同一行指定多个安装作为上下文。

      $ pip install --no-index --find-links file:/tmp/python_packages/ --use-wheel psutil my-package-1.4.zip
      

      【讨论】:

      • 我认为这不是原因,因为 pip 找到了轮子;它只是因为听起来不合法(python版本)的原因而拒绝安装它;)
      • 这与 pip/ven/setuptools 版本有关,而不是 Python 版本恕我直言。 @Anto:您使用的这些工具的版本是什么?为了它,哪个 Linux 发行版/版本?
      • pip --version 的输出是什么?
      猜你喜欢
      • 1970-01-01
      • 2023-01-16
      • 2021-08-05
      • 2017-04-18
      • 2020-06-08
      • 1970-01-01
      • 2022-01-08
      • 2020-04-22
      • 2023-01-19
      相关资源
      最近更新 更多