【问题标题】:How is pip install using git different than just cloning a repository?使用 git 进行 pip install 与仅克隆存储库有何不同?
【发布时间】:2011-04-11 00:30:01
【问题描述】:

我是 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

如果我这样做......

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

我最终得到了一份basic/blog 的副本,它确实有一个模板目录。

我怀疑django-basic-apps 或 pip 导致无法通过 pip 安装它。我想也许阅读django-basic-appssetup.py 会引导我找到答案,但我看不到。

(我应该补充一点,如果我在不使用 pip 的情况下安装,我可以让 django-basic-apps 正常工作。)

【问题讨论】:

    标签: python django pip


    【解决方案1】:

    当您使用“pip”安装某些东西时,包的setup.py 用于确定要安装的包。而这个项目的setup.py,如果我没看错的话,说“只需将这些 Python 包安装在basic 目录中”——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 文件找到的。

    试试看,如果这也适用于您的机器,请告诉我!

    【讨论】:

    • 谢谢布兰登。它起作用了,但更重要的是,我现在更好地理解了它。谢谢!
    • 不客气!我应该注意,对于未来的读者,上面的代码有点脆弱,只适用于“templates.html”深处最多两个目录的模板;一个完整的示例可能会os.walk() 整个树并找到所有.html 文件无论多么深。太糟糕了package_data 模式不支持 zsh(1) 约定:templates/**/*.html
    • 谢谢布兰登,很好的回答。 FWIW 我非常怀疑这是故意的;如果模板不打算与应用程序一起使用,则将模板包含在源存储库中的该位置是不寻常的。简单包装失败的可能性更大;我已经向项目提交了一个错误,以确保作者意识到这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-07
    • 1970-01-01
    • 1970-01-01
    • 2017-03-04
    • 2016-08-15
    • 2013-07-14
    相关资源
    最近更新 更多