11

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

现在服务器上的一切都准备好了,但是由于某种原因,当我运行安装时,pip拒绝安装psutil. 请注意,服务器是运行 pip 7.1.0、virtualenv 1.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...

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

4

3 回答 3

1

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

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

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

于 2016-12-05T13:21:12.507 回答
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

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

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

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

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

于 2016-05-31T06:56:21.710 回答
0

从您的回答看来,您似乎可以通过额外的步骤来使用它。

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

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

$ pip install --no-index --find-links file:/tmp/python_packages/ --use-wheel psutil my-package-1.4.zip
于 2016-05-26T10:40:49.580 回答