我有一个小应用程序(它是Django,但可能不相关;可以是任何python应用程序),我想将其部署到一个阶段并最终部署到生产服务器。如果重要的话,我的服务器是FreeBSD。
到目前为止,我正在工作的是一个暂存环境,该暂存环境具有正在运行的网络服务器,该服务器可以与正在为该应用程序提供服务的gunicorn
进行通信。我现在正在努力的是更新应用程序。
使用virtualenvwrapper
压缩包将应用程序安装到虚拟环境(使用sdist
创建)中。
python setup.py sdist
tar.gz
复制到登台服务器pip install <tarball>
虽然此工作流程实现了目标,但我对此感觉很不好。例如,它不允许我(或者我不知道如何使用)pinned packages。
我正在使用pip tools
创建一个不错的requirements.txt
文件,但是在上述过程中未使用该文件。如果我没记错的话,pip install
将查看setup.py
的{{1}}列表。那不是我固定的依赖。
我可以想到的另一种方法是,我只是install_requires
到服务器并使用git checkout
或可能更喜欢的python setup.py -e
来“安装”应用程序,然后运行pip install --no-deps -e .
。但这似乎也很奇怪(例如,git checkout可能会将不需要的内容复制到服务器)。
很可能可以使用仅在我想要的版本中具有软件包的本地“索引”(类似于SO上的问题How to install packages using pip according to the requirements.txt file from a local directory?),但这似乎也有些奇怪(并且费力/容易出错) )。
我认为这是一个常见的问题/疑问;但是我的Google-fu让我失望了。我尝试过
在登台>生产工作流程中部署python应用程序以允许对已安装的依赖项进行严格控制的合理选择是什么?