使用virtualenv时在pythonpath上包含Git子模块

时间:2011-12-13 16:32:46

标签: python django git virtualenv pythonpath

我正在使用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)。

我仍然更喜欢使用子模块,让一些依赖项存在于我的项目树中。这对我来说更有意义,因为我已经需要分配这些回购来改变它们中的一些,并且将来可能还需要更改它们。

1 个答案:

答案 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(可编辑)参数进行安装,这样您就可以编辑软件包,而不必每次都要卸载/安装测试新东西:)