不使用gcc安装psutil

时间:2016-05-24 06:51:54

标签: python gcc setup.py python-packaging

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

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

现在旧的方式(pip在安装期间启动gcc)不再起作用了。

背景信息:

  • Linux服务器
  • python里面的virtualenv
  • 所有代码都需要从我们的数据中心部署(无需访问互联网)

我看到了这些替代方案:

RPM

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

轮式

我从未使用过它。

冻结

使用cx_freeze之类的工具。我以前从未这样做过。

其他解决方案?

我想还有其他方法可能更好解决这个问题。

背景

在这种情况下,

psutil只是一个例子。其他包含c扩展的python包也出现了同样的问题。想象一下,这里还没有RPM。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

包装方法有缺点(rpm,deb,wheel等):

  • 可能需要的C库二进制文件不可移植。这意味着如果环境具有不兼容的库,它可能会失败
  • 您需要努力保持QA环境和生产环境完全相同,使用相同的lib版本。否则,您可能会遇到QA时间内无法捕获的生产问题。我遇到了这个问题,例如,一个版本的MySQL驱动程序只在生产中恐慌。

因为IMO,最好的解决方案是一个docker容器,可以在任何环境中提供完全相同的库。虽然你的情况可能有点过分。

如果你习惯了很简单的码头工具:

RUN deps='gcc make'; 
    && apt-get update && apt-get install -y $deps --no-install-recommends 
    && pip install MySQL-python
    && apt-get purge -y --auto-remove $deps

该示例在一行中执行所有操作,以避免将中间文件捆绑到docker镜像。

如果你在https://superuser.com/中提出这个问题,我想这也是直截了当的做法。如果你不习惯停泊者,这是一个小教程:

Docker Explained: How To Containerize Python Web Applications