我对python和虚拟环境都很陌生。我知道我应该在虚拟环境中安装所有的库并创建requirement.txt
,这样其他人就可以使用它安装。但是,我不确定部署到生产环境中的最佳实践是什么?
我问这个问题的原因是,没有人可以访问生产环境,部署是通过预定义的管道进行的,我的理解是,它将压缩我所有的代码并将其部署到生产环境中,没有人可以进入生产环境进行任何手动工作。我可以尝试让管道运行一个脚本,根据requirement.txt安装所有库。但我不确定防火墙设置是否相同。2我是否也应该打包这些库?
还有,我应该如何触发python脚本?我应该有一个 Package 器脚本来激活vevn在调用python脚本之前,然后去激活它吗?或者有一个更简单的方法?
3条答案
按热度按时间ljo96ir51#
第一,使用虚拟环境有几个原因。2主要原因是您可能有多个应用程序,它们具有不同且相互冲突的依赖关系(需要相同模块的不同版本)。第二个好处是,它确实通过在虚拟环境中执行
pip freeze
命令来巧妙地"枚举"应用程序所需的模块。无论您是否计划迁移到新环境,这都非常有用。只要您的应用程序具有如下的 * shebang *:
那么您不必激活虚拟环境,脚本就可以找到环境的模块。无论如何,这是我使用
python -m venv
命令创建虚拟环境的经验。因此,理想情况下,您应该具有对生产环境的shell访问权限,并且能够在那里创建虚拟环境,并使用
requirements.txt
文件对其进行初始化,该文件是通过在开发虚拟环境中使用pip freeze
命令创建的。因此,我不会将虚拟环境置于源代码控制之下,而是将requirements.txt
文件置于源代码控制之下。6vl6ewon2#
为了让你的程序在任何地方工作,无论是生产还是开发,它都需要所需的库。一般来说,我们要做的是,在服务器上创建一个新的虚拟环境(就像Booboo说的'python -m venv<env_name>'),并安装所有需要的包(pip install -r requirements.txt)('requirements.txt'应该在你的开发机器上用'pip freeze〉requirements.txt'创建)
既然你说不允许任何人直接访问生产服务器,那么一定有什么步骤是你的系统管理员希望你去做的,只有他/她才能帮你,至于防火墙,如果你的程序服务于某个端口,如果你的程序必须可以从本地主机之外的其他计算机访问,则必须打开该特定端口。这是服务器管理员应该为您做的事情。
5n0oy7gb3#
当谈到在没有互联网的服务器上部署应用程序时。考虑使用PEX部署,Pants build system。或者像Booboo说的,你可以使用虚拟环境部署和运行(不是真正的Python方式),但它是有效的。对于我们的用例,我们实际上是这样做的。