2012-01-17 10 views
9

मेरे पास एक प्रोजेक्ट है जिसमें से मैं दो अलग पायथन पैकेज उत्पन्न करना चाहता हूं। मैं पीपी का उपयोग कर इन पैकेजों को स्थापित करना चाहता हूं।एकाधिक setup.py स्क्रिप्ट का उपयोग कर एकाधिक परियोजनाएं?

यह पिछले प्रश्न के उत्तर में, सामान्य सिफारिश दो setup.py स्क्रिप्ट लिखने के लिए गया था: Multiple projects from one setup.py?

तो मैं इस तरह एक संरचना की कोशिश की:

/myproject 
    setup_foo.py 
    setup_bar.py 
    /mypackage1 
    /mypackage2 
    ... 

setup_foo.py में मैं script_name पैरामीटर सेट:

from distutils.core import setup 
setup(name = 'foo', 
     version = '2.0.0', 
     ..., 
     script_name = 'setup_foo.py') 

(मैंने पैरामीटर के बिना नीचे भी कोशिश की - वें के अनुसार ई प्रलेखन यह चूक sys.argv को [0])

मैं

python setup_foo.py sdist 

का उपयोग कर foo-2.0.0.tar.gz बनाने लेकिन जब मैं pip install foo-2.0.0.tar.gz, मैं इस तरह एक त्रुटि प्राप्त:

Unpacking .../foo-2.0.0.tar.gz 
Running setup.py egg_info for package from file:///...foo-2.0.0.tar.gz 
Traceback (most recent call last): 
    File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: '/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 
Complete output from command python setup.py egg_info: 
Traceback (most recent call last): 
File "<string>", line 14, in <module> 
IOError: [Errno 2] No such file or directory: 
'/var/folders/wj/jv7n2pmn5d1g1jjx6khc8bx80000gn/T/pip-v3dujq-build/setup.py' 

मैं कुछ याद आ रही है का उपयोग करने के लिए pip को निर्देश देने का तरीका? या मुझे अलग-अलग निर्देशिकाओं में 'setup.py' नामक दो स्क्रिप्ट्स रखनी चाहिए?

उत्तर

6

सवाल यह है कि आप उन परियोजनाओं को एक निर्देशिका में क्यों डालते हैं। मेरी सिफारिश उन्हें ठीक से अलग करने के लिए होगी, और फिर उन्हें "setup.py develop -U" के माध्यम से साझा वर्चुअलएन्व में जोड़ें। वहां गया, ऐसा किया, खूबसूरती से काम करता है।

अन्यथा, आपकी अगली समस्या "setup.cfg", "MANIFEST.in" साझा कर रही होगी, सामान्य रूप से, जब भी आप setuptools/वितरण की धारणाओं को तोड़ते हैं, तो सामान्य रूप से आपको बहुत अनावश्यक दर्द होगा।

मैं लगता आप ऊपर संरचना चुना है ताकि दोनों संकुल पूर्ण रूप से अपने अजगर रास्ते में हैं "विकसित यू" यह स्पष्ट है, और "आयात इस" उद्धृत:

स्पष्ट तुलना में बेहतर है निहित।

+0

आपके उत्तर के लिए धन्यवाद! मैंने दिखाए गए ढांचे को चुनने के मेरे कारणों के बारे में लगभग सही हैं; मैं उनमें से दो था। सबसे पहले, मैं PyDev/ग्रहण का उपयोग कर रहा हूं और यदि संभव हो तो अंतर-परियोजना निर्भरताओं से बचना चाहता था। दूसरा, मेरे दो वितरण परियोजना में लगभग सभी पैकेज साझा करते हैं - वे मुख्य रूप से भिन्न होते हैं जिसमें कमांड लाइन उपकरण शामिल होते हैं - इसलिए उन्हें दो या तीन अलग-अलग परियोजनाओं में विभाजित करना थोड़ा अधिक लग रहा था। यदि एक प्रोजेक्ट में दो वितरण गलत तरीके से सेटअप करते हैं, तो मैं केवल एक वितरण का चयन कर सकता हूं और सभी सर्वरों पर सभी स्क्रिप्ट को तैनात करने के लिए स्वीकार कर सकता हूं। –

+1

कुछ प्रेरणा के लिए http://code.google.com/p/pyroscope/source/browse/trunk/update-to-head.sh देखें। यदि आप वर्चुअलएन्व (हमेशा एक अच्छा विचार, यहां तक ​​कि एक उत्पादन मशीन पर) स्थापित करते हैं, तो आप टूल स्टब्स को चुनिंदा सिमलिंक कर सकते हैं, और इस प्रकार एक चयनित सबसेट प्रकाशित कर सकते हैं ("ln -nfs $ (grep -l 'entry_point। * Pyrocore देखें == '$ पीडब्ल्यूडी/बिन/*) $ {BIN_DIR: - ~/bin}/"कमांड)। – pyroscope

+0

चालाक! हां, यह स्क्रिप्ट के सबसेट छुपा/प्रकाशित करने का एक आसान तरीका है। –

0

ऐसा लगता है कि setuptools सेटअप स्क्रिप्ट का समर्थन नहीं करता है जिसे set.py नाम नहीं दिया गया है, distutils के विपरीत। मुझे लगता है कि setuptools (bugs.python.org/setuptools) में बग की रिपोर्ट करना और डेवलपर्स (बिटबकेट पर) वितरित करना सबसे अच्छा होगा।

+1

यह एक बग के बजाय एक विशेषता हो सकती है ... सवाल यह है कि "script_name" का क्या प्रभाव होना चाहिए। दस्तावेज उस पर विशेष रूप से स्पष्ट नहीं है। –

+0

distutils दस्तावेज़ों में केवल यह शामिल है: http://docs.python.org/distutils/apiref#distutils.core.run_setup –

संबंधित मुद्दे