【问题标题】:Best practice of python virtual environment deploymentpython虚拟环境部署最佳实践
【发布时间】:2020-07-01 19:59:48
【问题描述】:

对不起,如果这在另一篇文章中得到了回答。

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

我问的原因是没有人可以访问生产环境,部署是通过预定义的管道进行的,我的理解是它将压缩我所有的代码并将其部署到生产环境,没有人想去投入生产做任何手工工作。我可以尝试让管道运行脚本以根据requirement.txt安装所有库,但我不确定防火墙设置是否相同。我也应该打包这些库吗?

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

【问题讨论】:

  • 一个问题太多了。你应该分开问你的问题。也可以阅读How to Ask。

标签: python-3.x deployment virtualenv


【解决方案1】:

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

只要你的应用有如下shebang:

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

那么您不必为您的脚本激活虚拟环境来查找环境的模块。无论如何,这是我使用python -m venv 命令创建的虚拟环境的经验。

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

【讨论】:

    【解决方案2】:

    要让您的程序在任何地方运行,无论是生产还是开发,它都需要所需的库。 通常所做的是,我们在服务器上创建一个新的虚拟环境(如 Booboo 所说的'python -m venv ')并安装所有必需的包(pip install -r requirements.txt)('requirements. txt' 应该在你的开发机器上使用 'pip freeze > requirements.txt' 创建)

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

    【讨论】:

      【解决方案3】:

      在没有互联网的服务器上部署应用程序时。考虑使用 PEX 进行部署,Pants 构建系统。或者正如 Booboo 所说,您可以使用虚拟环境(不是真正的 Python 方式)进行部署和运行,但它可以工作。对于我所在的用例,我们实际上是这样做的。

      【讨论】:

        猜你喜欢
        • 2021-10-26
        • 2016-02-11
        • 1970-01-01
        • 2021-01-25
        • 2021-03-15
        • 1970-01-01
        • 1970-01-01
        • 2010-11-25
        • 2017-07-06
        相关资源
        最近更新 更多