使用 setup.py 和 Pipfile 部署 python 应用程序

Deploy python app with setup.py and Pipfile

我有一个带有 Pipfile 的烧瓶应用程序和 运行 pipenv run python setup.py sdist 来创建一个包。我把包复制到另一个系统。

通常我会用 pip 安装它,并且在 setup.py 中的 install_requires 中声明的所有要求都会自动安装。

如何安装软件包及其要求并使用 Pipfile.lock?

如果我使用 pip 安装包,我可以 运行 pipenv install --deploy 在安装的目录中,但是我怎样才能可靠地检索我的包的安装目录?这是执行此操作的好方法吗?

我正在寻找使用 setuptools 和 pipenv 安装 python 应用程序的最佳方法。

我将分享我对此的看法。

首先,您的项目的抽象依赖项将列在setup.py的install_requires中。如果可能,不应固定它们,并且不建议从其他地方读取 setup.py 中的依赖项。

因此,如果您安装使用 python setup.py sdist 创建的包,则不会使用该项目的 Pipfile.lock。相反,包的用户负责锁定依赖项并将包安装到 virtualenv 中。

要使用我们的 Pipfile.lock,我们需要一种不同的部署方法。我收集了一些。

1) git clone 目标机器上的存储库或 rsync -r 目标机器上的存储库。 运行 pipenv install --deploy 在克隆的项目目录中。有几种使用 virtualenv 的方法:

  • 从克隆的项目目录中使用 pipenv run <appname> 启动应用程序。确保您是创建 virtualenv 的同一用户。
  • 与创建 virtualenv 的同一用户一样,通过 运行ning pipenv --venv 从克隆的项目目录中检索 virtualenv 位置,并将其直接用于 运行ning 您的应用程序。
  • 在 运行ning pipenv install --deploy 之前设置 PIPENV_VENV_IN_PROJECT=1 环境变量以获得一致的 virtualenv 位置,然后您可以直接将其用于 运行ning 您的应用程序。
  • 在 运行ning pipenv 之前,手动创建一个 virtualenv,然后从那里 运行 pipenv。 Pipenv 将自动使用该 virtualenv 而不是创建一个新的。有关完整的工作流程,请参阅

2) 使用 pipenv install --system --deploy 从 docker 中的 Pipfile.lock 设置 virtualenv。然后只需使用 docker 映像进行部署。

3) 使用 pipenv lock --requirements > requirements.txt 将 Pipfile.lock 转储到 requirements.txt 并使用 dh-virtualenv.

构建 deb 包