Python 脚本 "standalone"

Python script "standalone"

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

我遇到了一个问题:我的脚本需要通过 pip 安装 'requests' 库(以及使用 pip 时附带的其他包)才能使脚本工作(以及一些文件夹就像 'database',我在其中存储一个 sqlite3 文件),我需要在很多机器上安装脚本,这些机器有不同的 Ubuntu 版本,因此有不同的 Python 版本,我想要我的脚本到 运行 'standalone' 并且每次我在新机器上设置脚本时都不必 install/update Python、pip 和 'requests' 包。我正在我的机器上的 virtualenv 中开发,该机器当前设置了 运行 脚本所需的所有软件包。

我可以制作一个 'copy' 我的 virtualenv,这样它就可以用我的 Python 脚本移动到其他计算机,包括我的数据库文件夹,而不必 install/update python 和 pip 在每台机器上,而不是使用这个独立版本的 python?所有机器都是Linux.

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

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

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

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

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

pip freeze > requirements.txt

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

pip install -r requirements.txt 

它会安装所有依赖项。

但是,这只是处理了库依赖项。 python 本身的版本、OS 环境等等...所以这就是您可能需要开始寻找解决方案的地方,例如 Docker。使用 Docker,您可以在 Docker 文件中指定完整的环境。然后另一台机器上的任何人都可以 运行 docker 图像,包括所有依赖项。这很快成为交付代码的实际方式(在所有语言中,但在 Python 中特别有用)。