4

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

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

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

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

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

4

1 回答 1

1

我将分享我对此的想法。

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

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

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

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

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

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

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

于 2018-05-30T07:19:30.063 回答