【问题标题】:Deploy python app with setup.py and Pipfile使用 setup.py 和 Pipfile 部署 python 应用程序
【发布时间】:2017-12-05 21:31:31
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 嗨,克里斯,您找到解决方案了吗?
  • 我会在接下来的几天内发表我的想法

标签: python setuptools pipenv


【解决方案1】:

我将分享我对此的想法。

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

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

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

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

  • 从克隆的项目目录中使用pipenv run <appname> 启动应用程序。确保您是创建 virtualenv 的同一用户。
  • 通过从克隆的项目目录中运行 pipenv --venv 来检索 virtualenv 位置,作为创建 virtualenv 并直接使用它来运行您的应用的同一用户。
  • 在运行pipenv install --deploy 之前设置PIPENV_VENV_IN_PROJECT=1 环境变量以获得一致的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 包。

【讨论】:

    猜你喜欢
    • 2021-01-01
    • 2019-07-14
    • 2021-02-22
    • 2011-05-27
    • 2020-01-25
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    相关资源
    最近更新 更多