如何使用 pipenv 安装“全局”应用程序以作为服务运行

如何使用 pipenv 安装“全局”应用程序以作为服务运行

从 Stack Overflow 交叉发布,因为它可能与那里的主题无关。

我正在尝试使用 pipenv 将 Python 应用程序分发到服务器(在本例中是 Windows,但对于 Linux 我也存在类似的不确定性)。

我之前做过以下事情:

  1. 安装系统范围的 Python
  2. pip install pipenv

然后pipenv installpipenv 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 让我很困惑。

相关内容