3

我正在使用 Git 对 Django 项目进行版本控制。

尽可能将不属于项目本身但项目依赖的所有源代码作为 Git 子模块引入。它们位于一个lib目录中,并且必须包含在 python 路径中。目录/文件布局如下所示:

.git
docs
lib
my_project
    apps
    static
    templates
    __init__.py
    urls.py
    manage.py
    settings.py
    .gitmodules
README

你会说,在 python 路径中包含库的最佳实践是什么?

我正在使用 virtualenv,所以我可以轻松地将库符号链接到 virtualenv 的站点包目录。但是,这会将 virtualenv 绑定到这个特定的项目。我的理解是 virtualenv 不应该依赖于我的文件。相反,我的文件应该依赖于 virtualenv。

我正在考虑为这个项目的不同本地副本使用相同的 virtualenv,但如果我这样做,我将失去这种能力。任何更好的想法如何解决这个问题?


更新:

最好的解决方案是让 pip 管理所有依赖项。

但是,这意味着不能使用 git 子模块,因为 pip还不能正确处理相对路径。因此,外部依赖项必须存在于 virtualenv 上(通常是:my_env/src/a_python_module)。

我仍然更喜欢使用子模块,让一些依赖项存在于我的项目树上。这对我来说更有意义,因为我已经需要分叉这些 repos 以更改其中的一些内容,并且将来可能需要进行更多更改。

4

1 回答 1

3

dump all your installed packages in a requirement file (requirements.txt looks the standard naming) using

pip freeze > requirements.txt

everytime you need a fresh virtualenv you just have to do:

virtualenv <name> --no-site-packages
pip install -r requirements.txt

the install -r requirements.txt works great also if you want to update to newer packages

just keep requirements.txt in sync with your packages (by running pip freeze every time something changes) and you're done, no matter how many virtualenv you have.

NOTE: if you need to do some development on a package you can install that using the -e (editable) param, this way you can edit the package and you don't have to uninstall/install every time you want to test new stuff :)

于 2011-12-13T16:44:56.353 回答