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

标签 python setuptools pipenv

我有一个带有 Pipfile 的 flask 应用程序,并运行 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 的同一用户。
  • 通过运行 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) 使用 pipenv lock --requirements > requirements.txt 将 Pipfile.lock 转储到 requirements.txt 中并使用 dh-virtualenv 构建 deb 包.

关于python - 使用 setup.py 和 Pipfile 部署 python 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47662991/

相关文章:

python - 我们可以限制APScheduler只运行100次吗?

python - setup.py、setuptools、cmdclass - 自定义命令不起作用

python - Pipenv 无法正确解析列出的两个来源的依赖关系

python - 在站点包中安装我的 Python 单元测试是否有意义?

python - pypi信息显示在错误的地方

python-3.x - pipenv install <package>与pip install <package>有什么区别?

python - 尝试使用 pipenv 安装时出现 ValueError

python - 分割字符串并按字长排序

python - python中的圆形/极坐标直方图

python - Pandas 中的高级数据透视表