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