很抱歉,如果另一篇文章中回答了这个问题。
我对python和学习虚拟环境非常陌生。我知道应该在虚拟环境中安装所有库并创建require.txt,以便其他人可以使用该库进行安装。但是,我不确定部署到生产中的最佳实践是什么?
我问的原因是没人会访问生产环境,部署是通过预定义的管道进行的,而我的理解是它将压缩我的所有代码并将其部署到生产中,没人会去投入生产后可以做任何体力劳动。我可以尝试让管道运行一个脚本以基于require.txt安装所有库,但是我不确定防火墙设置是否相同。我也应该打包库吗?
另外,我应该如何触发python脚本?我应该有一个包装器脚本在调用python脚本之前激活vevn,然后再将其停用吗?还是有更简单的方法?
答案 0 :(得分:1)
要使您的程序在生产或开发中的任何地方都能运行,它需要必需的库。
通常要做的是,在服务器上创建一个新的虚拟环境(如Booboo所说的“ python -m venv
由于您说过,不允许任何人直接访问生产服务器,因此必须有一些步骤,系统管理员希望您遵循。在这种情况下,只有他/她可以为您提供帮助。 至于防火墙,如果您的程序服务于某个端口,并且您的程序必须可以从除本地主机之外的其他计算机访问,则必须打开该特定端口。那是您的服务器管理员应该为您做的事情。
答案 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
文件置于源代码控制之下。