我正在使用Git对Django项目进行版本控制。
尽可能地,所有不属于项目本身但源于项目所依赖的源代码都是作为Git子模块引入的。它们存在于lib
目录中,必须包含在python路径中。目录/文件布局如下所示:
.git
docs
lib
my_project
apps
static
templates
__init__.py
urls.py
manage.py
settings.py
.gitmodules
README
你会说,在python路径中包含libs的最佳做法是什么?
我正在使用virtualenv,因此我可以轻松地将这些库sym链接到virtualenv的site-packages目录。但是,这将把virtualenv与这个特定项目联系起来。我的理解是virtualenv不应该依赖我的文件。相反,我的文件应该取决于virtualenv。
我在考虑为这个项目的不同本地副本使用相同的virtualenv,但如果我这样做,我将失去这种能力。更好的想法如何处理这个?
更新:
最好的解决方案是让pip管理所有依赖项。
然而,这意味着无法使用git子模块,如pip can't yet handle relative paths properly。因此,外部依赖关系必须存在于virtualenv(通常是:my_env / src / a_python_module)。
我仍然更喜欢使用子模块,让一些依赖项存在于我的项目树中。这对我来说更有意义,因为我已经需要分配这些回购来改变它们中的一些,并且将来可能还需要更改它们。
答案 0 :(得分:3)
使用
将所有已安装的软件包转储到需求文件中(requirements.txt查找标准命名)pip freeze > requirements.txt
每当你需要一个新鲜的虚拟现实时,你就必须这样做:
virtualenv <name> --no-site-packages
pip install -r requirements.txt
如果你想更新到更新的软件包,安装-r requirements.txt也很有用
只需将requirements.txt与您的软件包保持同步(通过每次更改时运行pip冻结)并且您已经完成,无论您拥有多少个虚拟软件。
注意:如果您需要在软件包上进行一些开发,可以使用-e(可编辑)参数进行安装,这样您就可以编辑软件包,而不必每次都要卸载/安装测试新东西:)