使用git的pip安装与直接克隆仓库有什么不同?
我刚开始学习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-apps
的 setup.py
文件能找到答案,但我没有找到。
(我还要补充一点,如果我不使用pip安装, django-basic-apps
是可以正常工作的。)
1 个回答
当你使用“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 文件找到的。
试试看,如果在你的机器上也能成功的话,告诉我哦!