我在考虑把virtualenv的Django web应用程序,我正在我的应用程序的git存储库。这似乎是一个简单的方法来保持部署的简单和容易。有什么理由不让我这么做吗?
当前回答
我认为最好的是将虚拟环境安装在存储库文件夹中的路径中,也许更好的是使用专用于环境的子目录(我在强制在存储库根文件夹中安装虚拟环境时意外删除了我的整个项目,很好,我将项目保存在Github的最新版本中)。
无论是自动安装程序还是文档都应该将virtualenv路径指示为相对路径,这样在与其他人共享项目时就不会遇到问题。关于包,使用的包保存在pip freeze -r requirements.txt中。
其他回答
我使用pip freeze将我需要的包添加到requirements.txt文件中,并将其添加到我的存储库中。我试图想出一种方法来解释为什么要存储整个virtualenv,但我找不到。
我认为最好的是将虚拟环境安装在存储库文件夹中的路径中,也许更好的是使用专用于环境的子目录(我在强制在存储库根文件夹中安装虚拟环境时意外删除了我的整个项目,很好,我将项目保存在Github的最新版本中)。
无论是自动安装程序还是文档都应该将virtualenv路径指示为相对路径,这样在与其他人共享项目时就不会遇到问题。关于包,使用的包保存在pip freeze -r requirements.txt中。
Storing the virtualenv directory inside git will, as you noted, allow you to deploy the whole app by just doing a git clone (plus installing and configuring Apache/mod_wsgi). One potentially significant issue with this approach is that on Linux the full path gets hard-coded in the venv's activate, django-admin.py, easy_install, and pip scripts. This means your virtualenv won't entirely work if you want to use a different path, perhaps to run multiple virtual hosts on the same server. I think the website may actually work with the paths wrong in those files, but you would have problems the next time you tried to run pip.
已经给出的解决方案是在git中存储足够的信息,以便在部署期间创建virtualenv并进行必要的pip安装。通常情况下,人们运行pip freeze来获取列表,然后将其存储在一个名为requirements.txt的文件中。可以用pip install -r requirements.txt加载。RyanBrady已经展示了如何将deploy语句串成一行:
# before 15.1.0
virtualenv --no-site-packages --distribute .env &&\
source .env/bin/activate &&\
pip install -r requirements.txt
# after deprecation of some arguments in 15.1.0
virtualenv .env && source .env/bin/activate && pip install -r requirements.txt
就我个人而言,我只是把这些放在我在做git克隆或git拉之后运行的shell脚本中。
存储virtualenv目录还使处理pip升级变得有点棘手,因为您必须手动添加/删除和提交升级产生的文件。对于requirements.txt文件,只需更改requirements.txt中的适当行,然后重新运行pip install -r requirements.txt。如前所述,这也减少了“提交垃圾邮件”。
我认为出现的主要问题之一是virtualenv可能无法被其他人使用。原因是它总是使用绝对路径。因此,如果您的virtualenv是在/home/lyle/myenv/,它将假设所有其他使用此存储库的人都是相同的(它必须是完全相同的绝对路径)。您不能假定人们使用与您相同的目录结构。
更好的做法是每个人都建立自己的环境(无论是否使用virtualenv)并在那里安装库。这也使您的代码在不同的平台(Linux/Windows/Mac)上更可用,还因为virtualenv安装在每个平台上都不同。
如果你只是设置开发环境,然后使用pip冻结文件,caz,使git回购干净。
然后如果进行生产部署,则签入整个venv文件夹。这将使您的部署更具可重复性,不需要那些libxxx-dev包,并避免互联网问题。
所以有两个回购。一个用于您的主要源代码,其中包括一个requirements.txt。和一个env repo,其中包含整个venv文件夹。
推荐文章
- 有办法在Python中使用PhantomJS吗?
- 如何在Python中将if/else压缩成一行?
- 如何在Python 3中使用pip。Python 2.x
- 如何让IntelliJ识别常见的Python模块?
- Django:“projects”vs“apps”
- 如何列出导入的模块?
- 转换Python程序到C/ c++代码?
- 如何从gmtime()的时间+日期输出中获得自epoch以来的秒数?
- 在python模块文档字符串中放入什么?
- 我如何在Django中过滤一个DateTimeField的日期?
- 如何在Django中序列化一个模型实例?
- 在Python中用索引迭代列表
- -e,——editable选项在pip install中什么时候有用?
- 使用pip命令从requirements.txt升级python包
- Django更改默认的runserver端口