2016-05-24 69 views
7

到目前为止,我们通过我们的自定义pypi服务器安装了psutil安装没有gcc的psutil

现在我们有一个新的环境,我们不应该安装gcc。

现在旧的方式(点安装过程中启动gcc)不再工作。

上下文:

  • Linux服务器
  • 蟒蛇里面的virtualenv
  • 需要从我们的数据中心(不包括互联网接入)

我看到这些替代方案部署的所有代码:

RPM

创建一个RPM。既然我们已经用--system-site-packages运行我们的virtualenv这个工程。这会强制服务器上的所有virtualenvs使用psutil的相同版本。但这不是什么大问题。

Wheel

我从来没有使用过。

冻结

使用像cx_freeze的工具。我从来没有这样做过。

其他解决方案?

我想还有其他的,也许更好的方法来解决这个问题。

背景

psutil只是在这种情况下的例子。其他包含c-extensions的python软件包也会出现同样的问题。想象一下,这里还没有RPM。

+0

我敢肯定,我只是用一个轮这种情况。然后,您必须为每个目标架构构建一个轮子(Gohlke的[用于Windows的轮子](http://www.lfd.uci.edu/~gohlke/pythonlibs/)的一个很好的例子 - 这是一个令人信服的理由这是大多数Windows用户没有正确的设置来编译扩展名C)。鉴于你所提供的赏金 - 是否有什么特别让你觉得编译车轮,然后使用例如目标机器上的“pip install”('.whl')可能会对您造成问题? –

+0

看起来这可能是http://stackoverflow.com/questions/31380578/how-to-avoid-building-c-library-with-my-python-package的欺骗 –

回答

6

最习惯的方式是使用轮子。事实上,您的使用案例是创建车轮格式的原因之一。

建设platform wheel很简单:

python setup.py bdist_wheel 

你可能会得到一个错误 “无效的命令 'bdist_wheel'”。在这种情况下,你必须安装wheel包:

pip install wheel 

构建轮之后,它在如dist/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl。您可以通过以下方式进行安装:

pip install dist/psutil-4.2.0-cp27-cp27mu-linux_x86_64.whl 

一般来说,安装和使用砂轮只适用于二进制兼容的系统。由于在不同的Linux发行版和版本中无法保证,因此在将轮子上传到中央PyPI时有restrictions。运行您自己的PyPI服务器时,这些限制不适用。

您可以通过车轮上传到您的自定义的PyPI:

python setup.py bdist_wheel upload --repository <url-to-custom-pypi> 

并通过例如,从您的自定义的PyPI安装:

pip install --index-url <url-to-custom-pypi> psutil 
+0

轮是去肯定的方式! –

+0

我不认为有任何限制上传Linux专用车轮Pypi?你有链接/指针吗?另外还有一个“many-linux”平台标签和wheel build的新支持。 –

+0

根据“Python Packaging User Guide”(https://packaging.python.org/en/latest/distributing/#platform-wheels ),其目标是成为关于如何使用当前工具打包,发布和安装Python发行版的权威资源。在我写的“根据文件”的答案中,这在技术上可能不是100%正确的。我会检查并相应地更新我的答案。 –