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

时间:2017-12-05 21:31:32

标签: python setuptools pipenv

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

我将分享我对此的看法。

首先,项目的抽象依赖项将列在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的用户。
  • 通过从克隆的项目目录中运行pipenv --venv作为创建virtualenv的同一用户并直接使用它来运行您的应用程序来检索virtualenv位置。
  • 在运行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转储到带有pipenv lock --requirements > requirements.txt的requirements.txt中,并使用dh-virtualenv构建deb包。