从 Stack Overflow 交叉发布,因为它可能与那里的主题无关。
我正在尝试使用 pipenv 将 Python 应用程序分发到服务器(在本例中是 Windows,但对于 Linux 我也存在类似的不确定性)。
我之前做过以下事情:
- 安装系统范围的 Python
pip install pipenv
然后pipenv install
和pipenv run
往常一样。这样做的好处是(我认为)任何用户或者确实是服务用户可以运行这些命令。我的目标是 Python 应用程序通常作为服务运行(在 Windows 上使用 nssm),但如果做不到这一点,任何用户都可以运行它,而无需安装 pipenv。
但是,官方文档建议用户安装时“避免破坏系统包”pip install --user pipenv
或通过pipx
。在这两种情况下,结果是 pipenv 二进制文件最终位于用户文件夹中,除非您想使用完整路径引用它,否则必须将其添加到 PATH。让服务指向我个人文件夹中的二进制文件感觉不对,同样,其他用户也必须安装自己的 pipenv 或将我的文件夹添加到他们的路径中。这一切似乎很奇怪,但也许我错过了什么。我的方法有什么问题吗?是否有使用 pipenv 进行部署的“最佳实践”方法?
进一步的困惑 我对此进行了更多实验,并意识到即使 pipenv 安装在系统级别,“virtualenvs”也是在用户级别创建的。但是,我发现可以使用环境变量来更改这一点,以将“virtualenv”放入项目内部。此外,我发现在 Windows 上,我无法从服务运行 pipenv,因为它似乎没有激活虚拟环境。相反,我必须创建一个激活虚拟环境并执行 main.py 的批处理文件,然后将 NSSM 指向该文件。
总结: 我正在寻找一种使用 pipenv 的部署工作流程,以便将 Python 软件作为服务运行*。理想情况下,我希望它与平台无关,这样我就可以在 Windows 和 Linux 服务器中使用类似的工作流程。
*在 Windows 上,我打算使用 NSSM 来运行该服务,在 Linux systemd 上。我对这些工具很满意,但 pipenv 让我很困惑。