2024-05-29 01:45:07 发布
网友
只是好奇人们是如何结合virtualenv部署他们的Django项目的
我将git用于scm,但git repo中没有我的virtualenv——我应该还是最好使用pip freeze,然后使用freeze输出在服务器上重新创建环境?(如果你这样做了,你能描述一下这些步骤吗?我发现关于解冻过程的很好的文档非常少,可能是pip install -r freeze_output.txt这样的事情吗?)
pip install -r freeze_output.txt
我只是在工作中使用pip、Fabric和git设置了类似的东西。流程基本上是这样的,并且大量借用this script:
git log -1 --format=format:%h TREEISH
SHA_OF_THE_RELEASE
git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt
1d02afc
pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
path/to/venv/1d02afc
这个小魔术部分是传递任何你想git的树,并让它做包装(从织物)。通过使用git archive my-branch、git archive 1d02afc或其他方式,我保证在远程计算机上安装正确的软件包。
git archive my-branch
git archive 1d02afc
我走了这条路,因为我真的不想有额外的virtuenv漂浮在周围,如果包没有改变之间的释放。我也不喜欢在我自己的源代码树中拥有我所依赖的实际包的想法。
我用这个bootstrap.py:http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py
需要的是名为“requirements”的目录,它看起来像这样:http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/
有一个apps.txt、一个libs.txt(apps.txt包括——我只是想让django应用程序与其他python模块分开)和一个src目录,其中包含实际的tarball。
当运行./bootstrap.py时,它将创建virtualenv(如果存在,则删除前一个),并将requirements/apps.txt中的所有内容安装到其中。否则我不会在virtualenv中安装任何东西。如果我想包含一个新库,我将tarball放入requirements/src/中,在其中一个文本文件中添加一行,然后重新运行./bootstrap.py。
bootstrap.py和需求被签入版本控制(也是pip.py的一个副本,所以我甚至不必在系统范围内的任何地方安装它)。virtualenv本身不是这样的。每次我推送到生产服务器上的脚本都会在生产服务器上运行./bootstrap.py。(bootstrap.py也不遗余力地确保它坚持使用Python2.5,因为这就是我们在生产服务器(UbuntuHardy)和my dev machine(UbuntuKarmic)上使用的,如果不小心的话,默认为Python2.6)
我只是在工作中使用pip、Fabric和git设置了类似的东西。流程基本上是这样的,并且大量借用this script:
git log -1 --format=format:%h TREEISH
部署的SHA。这给了我们SHA_OF_THE_RELEASE
git log -1 --format=format:%h SHA_OF_THE_RELEASE requirements.txt
获取我们的需求文件的最后一个SHA。这会弹出哈希的短版本,比如1d02afc
,它是这个特定版本的文件的SHA。1d02afc
的目录,将创建一个新的virtualenv,并使用pip install -E /path/to/venv/1d02afc -r /path/to/requirements.txt
进行设置path/to/venv/1d02afc
,则不执行任何操作这个小魔术部分是传递任何你想git的树,并让它做包装(从织物)。通过使用
git archive my-branch
、git archive 1d02afc
或其他方式,我保证在远程计算机上安装正确的软件包。我走了这条路,因为我真的不想有额外的virtuenv漂浮在周围,如果包没有改变之间的释放。我也不喜欢在我自己的源代码树中拥有我所依赖的实际包的想法。
我用这个bootstrap.py:http://github.com/ccnmtl/ccnmtldjango/blob/master/ccnmtldjango/template/bootstrap.py
需要的是名为“requirements”的目录,它看起来像这样:http://github.com/ccnmtl/ccnmtldjango/tree/master/ccnmtldjango/template/requirements/
有一个apps.txt、一个libs.txt(apps.txt包括——我只是想让django应用程序与其他python模块分开)和一个src目录,其中包含实际的tarball。
当运行./bootstrap.py时,它将创建virtualenv(如果存在,则删除前一个),并将requirements/apps.txt中的所有内容安装到其中。否则我不会在virtualenv中安装任何东西。如果我想包含一个新库,我将tarball放入requirements/src/中,在其中一个文本文件中添加一行,然后重新运行./bootstrap.py。
bootstrap.py和需求被签入版本控制(也是pip.py的一个副本,所以我甚至不必在系统范围内的任何地方安装它)。virtualenv本身不是这样的。每次我推送到生产服务器上的脚本都会在生产服务器上运行./bootstrap.py。(bootstrap.py也不遗余力地确保它坚持使用Python2.5,因为这就是我们在生产服务器(UbuntuHardy)和my dev machine(UbuntuKarmic)上使用的,如果不小心的话,默认为Python2.6)
相关问题 更多 >
编程相关推荐