0

我最近开始编写 python 脚本,但我还是该语言的新手。

我遇到了一个问题:我的脚本需要由 pip 安装“请求”库(以及使用 pip 时附带的其他包)才能使脚本正常工作(以及一些文件夹,如“数据库”,其中我存储了一个 sqlite3 文件),我需要在很多机器上安装脚本,这些机器有不同的 Ubuntu 版本,因此有不同的 Python 版本,我希望我的脚本能够“独立”运行,而不必安装/更新 Python,每次我在新机器上设置脚本时,pip 和“请求”包。我正在我的机器上的 virtualenv 中开发,该机器当前设置了运行脚本所需的所有包。

我可以制作一个我的 virtualenv 的“副本”,以便可以将它与我的 Python 脚本一起移动到其他计算机,包括我的数据库文件夹,而无需在每台计算机上安装/更新 python 和 pip,而是使用这个独立版本的 python ? 所有机器都是Linux。

我已经尝试将我的 virtualenv 复制到我的项目文件夹,但是当我尝试在 shebang 行中使用其中的 python 解释器运行我的脚本时,virtualenv 崩溃了,即使使用--relocatable参数也是如此,所以我想情况并非如此。

我也尝试过使用 PyInstaller,没有成功。

4

1 回答 1

0

欢迎来到部署的世界!你寻求的答案远非微不足道。

首先,Python 是一种解释性语言,实际上不应该作为桌面应用程序分发。如果您想创建可执行文件,那么可以使用一些库,例如py2exe。但是,这些充其量只是临时解决方案。他们将整个 Python 连同您的代码一起“冻结”,然后您将所有内容放在一起。

规定依赖项的最佳实践方法是在 requirements.txt 文件中。您可以使用以下命令创建一个:

pip freeze > requirements.txt

它的作用是检查当前在您正在使用的任何环境中的所有库,并将它们保存到一个名为 requirements.txt 的文件中。然后,该文件将包含您所需的所有库,任何收到您的代码的人都可以运行

pip install -r requirements.txt 

它将安装所有依赖项。

但是,这只需要处理库依赖关系。python 本身的版本、操作系统环境等呢?所以这就是你可能需要开始寻找像 Docker 这样的解决方案的地方。使用 Docker,您可以在 Dockerfile 中指定完整的环境。然后另一台机器上的任何人都可以运行 docker 镜像,包括所有依赖项。这很快成为交付代码的事实上的方式(在所有语言中,但在 Python 中特别有用)。

于 2018-09-16T11:59:09.167 回答