通过pip安装psutil (wheel)作为依赖项时出现麻烦

11

我写了一个包并且在依赖中使用了psutilmy-package 依赖于 third-party-package,而 third-party-package 又依赖于 psutil)。
由于它应该在没有任何连接和没有 gcc 的服务器上运行,所以我在本地准备了部署,并使用了 psutil Python 平台 wheelpip install my-package --download,然后把所有文件发送到服务器。

现在服务器上的一切都准备就绪,但由于某些原因,当我运行安装时,pip 拒绝安装 psutil。请注意,服务器是 Red Hat 7.2,运行 pip 7.1.0、virtualenv 1.10.1 和 Python 2.7.5(我无法更改任何东西的版本)。

$ 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...

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


第三方包是什么? - second
这是由我们公司内部的某个人开发的一个软件包。setup.py 文件包含 install_requires = ['psutil'];没有什么花哨的东西。 - Anto
不确定您是否有多个Python版本,但请在pip.log中验证两种情况下使用的Python是否是正确的版本?(https://dev59.com/yorda4cB1Zd3GeqPIijA)我并不确定这是否是您的问题,但这是一个开始。另外,为什么您还在使用2.7.5?最新版本是2.7.11。 - Tom Myddeltyn
另外,看起来你的psutil是64位的,也许这是问题的一部分? - Tom Myddeltyn
您好,感谢您的建议。我认为Python版本在系统和pip上是一致的,但我会再次确认。由于此服务器使用的是2.7.5版本,因此我没有使用最新的Python版本且无法更改。psutil的wheel是64位的,因为VM是64位的(不过这可能确实与根本原因有关?)。 - Anto
你使用的 pip、wheel 和 setuptools 版本是哪个? - Philippe Ombredanne
3个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
1
您面临的关键问题是我个人认为是这样的:

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)。

当要求直接安装轮时,pip仅进行最少的检查,并假定您确实希望安装此软件包。

当轮间接安装为依赖项的依赖项时,在此上下文中可能存在不兼容的标记。

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

稍微相关,如果这可以帮助的话,我使用this script,并使用Linux/MacWindows包装器来执行供应商pip软件包的一致安装。关键点是要将所有内容打包,这可能是您遇到某些故障的另一个原因。


1

确保您使用的wheel版本与部署期间使用的版本相同。

当我尝试使用0.24.0的wheel部署由0.29.0构建的wheel时,我遇到了同样的问题。

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


0

从你的回答来看,似乎你通过额外的步骤使其工作了。

在进行离线安装时,你需要明确告诉它要找到所有想要安装的包的位置,而不仅仅是顶层包。

我个人一直都很明确地指出你正在查找文件,并且像任何其他 pip 安装一样,你可以在同一行上指定多个安装包以提供上下文。

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

我不认为这是原因,因为pip找到了wheel;它只是因为一个听起来不合理的原因(Python版本),拒绝安装它 ;) - Anto
这与 pip/ven/setuptools 的版本有关,而不是 Python 版本。在我看来,@Anto:你使用的工具版本是什么?为了方便起见,使用的 Linux 发行版/版本是什么? - Philippe Ombredanne
pip --version 的输出是什么? - Luke Exton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,