2011-10-11 6 views
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 अप मैच के लिए नहीं है, इसलिए यह डाउनलोड किए गए एसडीआईस्ट को अनदेखा करता है और सामान्य रूप से वीसीएस से कोड की जांच जारी रखता है।

+0

आप कुछ निर्देशिका में 'PIP_DOWNLOAD_CACHE' सेट करने का प्रयास कर सकते हैं। यह बिटबकेट की 'टिप' टैरबॉल के लिए काम करता है। लेकिन मुझे संदेह है कि यह '@ संशोधन # अंडा = पैकेज' के लिए काम करता है। – jfs

+0

क्या ओएस टाइप निर्दिष्ट करने का कोई तरीका है? मैं मैक पर काम कर रहा हूं, लेकिन सेंटोस के लिए डाउनलोड चाहता हूं (उदाहरण के लिए क्रिप्टोग्राफी-1.8.1-सीपी 27-सीपी 27 एम-मैकोक्स_10_10_intel.whl या cffi-1.10.0-cp27-cp27m-macosx_10_6_intel.whl) – myloginid

+0

की एक छोटी सी विशेषता है इस तरह के अंडे के संस्करण को निर्दिष्ट करना (...) # अंडा = django-contact-form == xyz'। शायद यह यहां मदद करेगा। समस्या '--find-links' को संभालने का सेटअप setuptools द्वारा किया जाता है और स्वयं पाइप नहीं होता है और इससे कई चीजें कठिन या असंभव होती हैं। –

उत्तर

4

हालांकि ऐसा नहीं लगता है कि यह पीआईपी का उपयोग करके सख्ती से संभव है, एक कामकाज है जो एक ही चीज़ को पूरा करता है। वर्कअराउंड मूल आवश्यकताओं फ़ाइल और sdists निर्देशिका से स्वचालित रूप से दूसरी आवश्यकता फ़ाइल उत्पन्न करना है (केवल उस निर्देशिका के लिए उपयोग किया जाना है)।

एक साधारण कार्यान्वयन कुछ इस तरह (नामक एक फ़ाइल "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 
संबंधित मुद्दे