在Windows上部署Python包,编译依赖而不安装Visual Studio?

1 投票
2 回答
1423 浏览
提问于 2025-04-18 11:16

如果我想把一个Python包放到Windows服务器上,但有些依赖项需要编译,最好的办法是什么呢?我不想安装Visual Studio,而且每次更新都传一个250MB的文件也让我觉得麻烦。我的目标是用 pip install -r requirements.txt 来安装这些依赖。

有没有什么建议呢?

2 个回答

3

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集成。

2

使用一次编译,多次部署的策略可能会有所帮助,这里可以用到Python最新的包分发格式——wheels。这种格式是已经编译好的二进制文件。所以,你只需要一个和部署平台相似的开发/构建环境(后者就不需要再进行构建了)。

首先,安装最新的 pipsetuptoolswheel 包。然后,你可以像使用 pip install 一样使用 pip wheel 命令,不过它会生成一个默认叫做 wheelhouse 的文件夹,里面装满了你需要的、已经编译好的 wheels,供其他的 Python/pip 安装使用。

接下来,你可以直接将这些 wheel 文件的路径传给 pip install 命令(比如在你的部署机器上),或者使用正常的包名加上 --no-index --find-links= 参数,指向这些 wheels 所在的文件夹。这个位置也可以是一个简单的 HTTP 文件夹——比如说

撰写回答