python虚拟环境部署的最佳实践

时间:2020-07-01 19:59:48

标签: python-3.x deployment virtualenv

很抱歉,如果另一篇文章中回答了这个问题。

我对python和学习虚拟环境非常陌生。我知道应该在虚拟环境中安装所有库并创建require.txt,以便其他人可以使用该库进行安装。但是,我不确定部署到生产中的最佳实践是什么?

我问的原因是没人会访问生产环境,部署是通过预定义的管道进行的,而我的理解是它将压缩我的所有代码并将其部署到生产中,没人会去投入生产后可以做任何体力劳动。我可以尝试让管道运行一个脚本以基于require.txt安装所有库,但是我不确定防火墙设置是否相同。我也应该打包库吗?

另外,我应该如何触发python脚本?我应该有一个包装器脚本在调用python脚本之前激活vevn,然后再将其停用吗?还是有更简单的方法?

2 个答案:

答案 0 :(得分:1)

要使您的程序在生产或开发中的任何地方都能运行,它需要必需的库。 通常要做的是,在服务器上创建一个新的虚拟环境(如Booboo所说的“ python -m venv ”),然后安装所有必需的软件包(pip install -r requirements.txt)(“要求”。 txt”应该在您的开发计算机上使用“ pip Frozen> requirements.txt”创建)

由于您说过,不允许任何人直接访问生产服务器,因此必须有一些步骤,系统管理员希望您遵循。在这种情况下,只有他/她可以为您提供帮助。 至于防火墙,如果您的程序服务于某个端口,并且您的程序必须可以从除本地主机之外的其他计算机访问,则必须打开该特定端口。那是您的服务器管理员应该为您做的事情。

答案 1 :(得分:0)

首先,有几个虚拟环境的原因。主要原因是您可能有多个具有不同且冲突依赖关系的应用程序(即,需要相同模块的不同版本)。第二个好处是,它可以通过在虚拟环境中执行pip freeze命令来巧妙地“枚举”应用程序所需的模块。无论您是否打算迁移到新环境,这都很有用。

只要您的应用程序具有 shebang ,如下所示:

#!/full-path-to-the-bin-directory-of-my-virtual-environment/python3

然后,您无需激活虚拟环境即可让脚本来查找环境的模块。无论如何,这是我在使用python -m venv命令创建的虚拟环境中的经验。

因此,理想情况下,您将具有对生产环境的外壳访问权限,并能够在其中创建虚拟环境,并使用在开发虚拟环境中使用requirements.txt命令创建的pip freeze文件对其进行初始化。因此,我不会将虚拟环境置于源代码控制之下,而会将requirements.txt文件置于源代码控制之下。