使用git的pip安装与直接克隆仓库有什么不同?

19 投票
1 回答
8774 浏览
提问于 2025-04-16 03:59

我刚开始学习Django,想用pip安装django-basic-apps,但遇到了一些问题。

如果我这样做……

$ cat requirements.txt 
git+git://github.com/nathanborror/django-basic-apps.git

$ pip install -r requirements.txt

我得到的结果是 lib/python2.6/site-packages/basic/blog,但是里面没有templates这个文件夹。

如果我这样做……

git clone http://github.com/nathanborror/django-basic-apps.git

我得到的结果是一个包含 basic/blog 的副本,并且里面有templates这个文件夹。

我怀疑是 django-basic-apps 或者pip的某些设置导致我无法通过pip安装。我想也许查看一下 django-basic-appssetup.py 文件能找到答案,但我没有找到。

(我还要补充一点,如果我不使用pip安装, django-basic-apps 是可以正常工作的。)

1 个回答

28

当你使用“pip”来安装某个东西时,它会用这个包的 setup.py 文件来决定要安装哪些包。如果我理解得没错,这个项目的 setup.py 文件里说的是“只安装 basic 目录里的这些 Python 包”——这个 setup.py 完全没有提到任何想要包含在安装中的非 Python 文件。

这可能是开发者故意这样做的,因为在 Django 包中,不包含模板是一个传统——甚至像内置的 django.contrib.auth 这样基本的东西也没有提供任何模板,每次都得从头开始自己构建小表单!(或者从网上其他地方复制粘贴示例。)

但是如果你想要在这个 Python 发行版中安装模板,不管作者是怎么设置的,那就直接在 setup.py 中列出这些模板吧!首先,在 setup.py 文件中添加类似这样的内容:

template_patterns = [
    'templates/*.html',
    'templates/*/*.html',
    'templates/*/*/*.html',
    ]

然后,在 setup() 调用的最后添加一个变量,让它看起来像这样:

...
packages=packages,
package_data=dict( (package_name, template_patterns)
                   for package_name in packages ))

这样就告诉 setup() 函数,每个包都应该有数据文件,这些文件是通过在每个包的 templates 目录下搜索 HTML 文件找到的。

试试看,如果在你的机器上也能成功的话,告诉我哦!

撰写回答