我有一个带有Pipfile的烧瓶应用,并运行pipenv run python setup.py sdist
来创建一个包。我将包复制到另一个系统。
通常我会用pip安装它,并且会自动安装setup.py中install_requires中声明的所有需求。
如何安装软件包及其要求并使用Pipfile.lock?
如果我用pip安装软件包,我可以在它安装的目录中运行pipenv install --deploy
,但是如何可靠地检索我的软件包安装的目录?这是一个很好的方法吗?
我正在寻找使用setuptools和pipenv安装python应用程序的最佳方法。
答案 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位置,然后您可以直接使用该位置来运行您的应用。 2)使用pipenv install --system --deploy
从docker中的Pipfile.lock设置virtualenv。然后只需使用docker镜像进行部署。
3)将Pipfile.lock转储到带有pipenv lock --requirements > requirements.txt
的requirements.txt中,并使用dh-virtualenv
构建deb包。