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 で何かをする必要がありますか? レポのURLを反映するように変更する必要がありますか?

UPD2 :私はstackoverflowで非常によく似た質問を見つけましたが、著者は問題をどのように解決したのか確信が持てず、受け入れられた回答は残念ながら良いヒントを与えませんが、著者のコメントから判断すると、それは関係がありますsetup.py ファイル。

UPD3 : download_urlsetup.py を渡して、この URL を使用して pip 経由でパッケージをインストールしようとしましたが、問題は解決しません。

4

3 に答える 3

17

-eのようなフラグを付けてパッケージをインストールすることは、簡単ですが有効な回避策pip install -e git+https://bitbucket.org/DataGreed/django-paramfield.git#egg=django-paramfieldです。

次にpip freeze、パッケージの完全なソース パスが表示されます。ピップで修正するのは最善の方法ではありませんが、機能しています。トレードオフ-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) へのパスを追加するだけです。

すなわち

...
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 に答える