在Windows上部署Python包,编译依赖而不安装Visual Studio?
如果我想把一个Python包放到Windows服务器上,但有些依赖项需要编译,最好的办法是什么呢?我不想安装Visual Studio,而且每次更新都传一个250MB的文件也让我觉得麻烦。我的目标是用 pip install -r requirements.txt
来安装这些依赖。
有没有什么建议呢?
2 个回答
easy_install - 允许从exe安装
easy_install
可以从exe安装程序进行安装,如果有的话。而pip
则不能从exe
安装,所以在处理C/C++包的时候,通常使用easy_install
来安装。
让pip
安装二进制文件
pip
支持从wheel
格式进行安装。
如果你在pypi或者其他你使用的索引服务器上有wheel文件,可以让pip
使用这些wheel(--use-wheels)。最新版本的pip
默认使用wheel格式,旧版本需要设置--use-wheel
这个选项。
构建wheel文件
你可以自己构建(编译)wheel文件,或者把egg文件或exe安装程序转换成wheel文件。
为此,可以使用wheel
命令。
提供wheel格式的包
有些包(比如lxml
)在pypi服务器上没有提供wheel文件。如果你想使用这些包,就需要自己管理一个索引。最简单的方法是使用一个专门的目录,并用--find-links
选项配置pip
指向这个目录。
想了解更多技巧和细节,可以查看关于缓存包的SO回答。
一个很好的替代方案是devpi
索引服务器,它很容易设置,工作流程也很好,并且能很好地与pip
集成。
使用一次编译,多次部署的策略可能会有所帮助,这里可以用到Python最新的包分发格式——wheels。这种格式是已经编译好的二进制文件。所以,你只需要一个和部署平台相似的开发/构建环境(后者就不需要再进行构建了)。
首先,安装最新的 pip
、setuptools
和 wheel
包。然后,你可以像使用 pip install
一样使用 pip wheel
命令,不过它会生成一个默认叫做 wheelhouse
的文件夹,里面装满了你需要的、已经编译好的 wheels,供其他的 Python/pip 安装使用。
接下来,你可以直接将这些 wheel 文件的路径传给 pip install
命令(比如在你的部署机器上),或者使用正常的包名加上 --no-index --find-links=
参数,指向这些 wheels 所在的文件夹。这个位置也可以是一个简单的 HTTP 文件夹——比如说。