11

次のコマンドを使用します。

pip install -r requirements.txt -d sdists/

プロジェクトで配布するための要件のアーカイブを簡単に作成できます。要件が次のようになっている場合、これはうまく機能します。

Django==1.3.1
django-tagging==0.3.1
django-robots==0.6.1

次に、次のように、PyPI にまったく触れずにこれらの要件をインストールできます。

pip install -r requirements.txt --find-links sdists/ --no-index

--editable要件に対して同じ方法を使用することは可能ですか? 例えば:

-e hg+https://bitbucket.org/ubernostrum/django-contact-form/@1d3791fa4dfb#egg=django-contact-form

私が知る限り、pip install -d編集可能な要件を喜んでダウンロードし、sdist を作成しますがpip install --find-links、ダウンロードした sdist を要件ファイル内の関連する行と一致させる方法がないため、ダウンロードした sdist を無視して、いつものようにVCSからのコード。

4

1 に答える 1

4

これがPIPを使用して厳密に可能であるようには見えませんが、同じことを達成する回避策があります。回避策は、元の要件ファイルとsdistsディレクトリ(そのディレクトリでのみ使用される)から2番目の要件ファイルを自動的に生成することです。

単純な実装は次のようになります(「make_reqs.py」というファイルに保存します)。

#!/usr/bin/env python

import re
import sys
import os.path

pat = '.+#egg=(.+)'
allowed_exts = ['.zip', '.tar.gz', 'tar.bz2']

def find_version(sdists_dir, name):
    files = [f for f in os.listdir(sdists_dir) if f.startswith(name)]
    if len(files) != 1:
        return ''
    version = files[0].replace(name+'-', '')
    for ext in allowed_exts:
        version = version.replace(ext, '')
    return version

def get_requirements(file_name, sdists_dir):
    out_reqs = ['--find-links file://%s' % os.path.abspath(sdists_dir)]
    with open(file_name) as req_file:
        reqs = [l.strip() for l in req_file.readlines()]
        for req in reqs:
            match = re.match(pat, req)
            if match and not req.startswith('#'):
                name = match.group(1)
                version = find_version(sdists_dir, name)
                if version:
                    out_reqs.append('%s==%s' % (name, version))
                else:
                    out_reqs.append(req)
            else:
                out_reqs.append(req)
    return out_reqs

if __name__ == '__main__':
    print '\n'.join(get_requirements(*sys.argv[1:]))

スクリプトを使用するには、次のようにします。

python make_reqs.py requirements.txt /path/to/sdists > sdist_reqs.txt
pip install --no-index -r sdist_reqs.txt
于 2011-10-12T14:23:28.787 に答える