21

我创建了一个环境并通过 git 添加了一个包 django-paramfield:

$ pip install git+https://bitbucket.org/DataGreed/django-paramfield.git
Downloading/unpacking git+https://bitbucket.org/DataGreed/django-paramfield.git
  Cloning https://bitbucket.org/DataGreed/django-paramfield.git to /var/folders/9Z/9ZQZ1Q3WGMOW+JguzcBKNU+++TI/-Tmp-/pip-49Eokm-build
Unpacking objects: 100% (29/29), done.
  Running setup.py egg_info for package from git+https://bitbucket.org/DataGreed/django-paramfield.git
Installing collected packages: paramfield
  Running setup.py install for paramfield
Successfully installed paramfield
Cleaning up...

但是当我想创建一个需求文件时,我只看到包名:

$ pip freeze
paramfield==0.1
wsgiref==0.1.2

我怎样才能让它输出整个字符串git+https://bitbucket.org/DataGreed/django-paramfield.git而不仅仅是一个包名?该软件包不在 PyPi 中。

UPD:也许,它必须与 setup.py 做点什么?我应该以某种方式更改它以反映回购网址吗?

UPD2:我在stackoverflow中发现了一个非常相似的问题,但是作者不确定他是如何解决问题的,不幸的是,接受的答案并没有给出很好的提示,尽管从作者的评论来看,它与setup.py 文件。

UPD3:我尝试download_url使用此 url 通过 pip 传入 setup.py 并安装包,但他的问题仍然存在。

4

3 回答 3

17

-e一个简单但可行的解决方法是安装带有pip install -e git+https://bitbucket.org/DataGreed/django-paramfield.git#egg=django-paramfield.

然后pip freeze显示包的完整源路径。这不是应该在 pip 中修复的最佳方法,但它正在工作。权衡-e(编辑标志)是 pip 将 git/hg 存储库克隆到/path/to/venv/src/packagename并运行,python setup.py deploy而不是将其克隆到临时目录并python setup.py install在设置包后运行并删除临时目录。

于 2012-07-24T11:25:09.243 回答
3

这是一个可以做到这一点的脚本:

#!/usr/bin/env python

from subprocess import check_output
from pkg_resources import get_distribution

def download_url(package):
    dist = get_distribution(package)
    for line in dist._get_metadata('PKG-INFO'):
        if line.startswith('Download-URL:'):
            return line.split(':', 1)[1]


def main(argv=None):
    import sys
    from argparse import ArgumentParser

    argv = argv or sys.argv

    parser = ArgumentParser(
        description='show download urls for installed packages')
    parser.parse_args(argv[1:])

    for package in check_output(['pip', 'freeze']).splitlines():
        print('{}: {}'.format(package, download_url(package) or 'UNKNOWN'))


if __name__ == '__main__':
    main()
于 2012-07-23T17:21:30.143 回答
1

这是一个老问题,但我刚刚解决了同样的问题和解决方案只需将存储库的路径(在我的情况下为 git)添加到需求文件而不是包名称

IE

...
celery==3.0.19
# chunkdata isn't available on PyPi
https://github.com/aaronmccall/chunkdata/zipball/master
distribute==0.6.34
... 

像对heroku的魅力一样工作

于 2013-07-20T18:16:34.273 回答