我最近开始编写python脚本,我仍然是该语言的新手。
我遇到了一个问题:我的脚本需要 pip 安装"请求"库(以及使用 pip 时附带的其他包)才能使脚本正常工作(以及一些文件夹,如"数据库",我在其中存储 sqlite3 文件),我需要在很多机器上安装脚本, 具有不同的 Ubuntu 版本,因此具有不同的 Python 版本,我希望我的脚本"独立"运行,并且不必每次在新机器中设置脚本时安装/更新 Python、pip 和"请求"包。我正在我的机器上的虚拟环境中进行开发,该虚拟机当前设置了运行脚本所需的所有软件包。
我可以制作我的 virtualenv 的"副本",以便它可以与我的 Python 脚本一起移动到其他计算机,包括我的数据库文件夹,而无需在每台机器上安装/更新 python 和 pip,而是使用这个独立版本的 python?所有的机器都是Linux。
我已经尝试将我的 virtualenv 复制到我的项目文件夹中,但是当我尝试在 shebang 行中使用 python 解释器运行我的脚本时,virtualenv 崩溃了,即使使用--relocatable
参数也是如此,所以我想情况并非如此。
我也尝试使用PyInstaller,但没有成功。
欢迎来到部署世界!你寻求的答案远非微不足道。
首先,Python是一种解释型语言,实际上不应该作为桌面应用程序分发。如果你想创建可执行文件,那么有一些库可以做到这一点,比如py2exe。但是,这些充其量只是临时解决方案。它们将整个Python和你的代码一起"冻结",然后你把所有东西都放在一起。
规定依赖项的最佳实践方法是在 requirements.txt 文件中。您可以使用以下命令创建一个:
pip freeze > requirements.txt
这样做的目的是检查当前在您正在使用的任何环境中的所有库,并将它们保存到名为 requirements.txt 的文件中。然后,该文件将包含所有必需的库,任何收到您的代码的人都可以运行
pip install -r requirements.txt
它将安装所有依赖项。
但是,这只处理了库依赖项。python本身的版本,操作系统环境等呢?因此,您可能需要开始寻找像Docker这样的解决方案。使用 Docker,您可以在 Dockerfile 中指定完整环境。然后,另一台计算机上的任何人都可以运行 docker 映像,其中包含所有依赖项。这很快成为事实上的代码交付方式(在所有语言中,但在 Python 中特别有用)。