2012-09-17 16 views
27

परियोजना पेड़:किसी भी फ़ोल्डर बनाने के लिए जरूरत के बिना एक भी .py फ़ाइल और एक ही डेटा फ़ाइल की पैकेजिंग के लिए setup.py की स्थापना

$. 
├── happy_birthday-art.txt 
├── happy_birthday.py 
├── MANIFEST.in 
├── README.rst 
└── setup.py 

setup.py

from setuptools import setup 

setup(
    name='Happy_birthday', 
    py_modules=['happy_birthday'], 
    data_files=['happy_birthday-art.txt'], 
    entry_points={ 
    'console_scripts': ['happy_birthday = happy_birthday:main', ],}, 
    long_description=open('README.rst').read(), 
) 

अब जब मैं python setup.py sdist करता हूं और फिर pip install वर्चुअल वातावरण में बनाई गई .tar.gz फ़ाइल मुझे निम्न संदेश मिलता है:

warning: install_data: setup script did not provide a directory for 'happy-birthday-art.txt' -- installing right in '/home/username/.virtualenvs/happy_birthday' 

प्रोग्राम उस .txt फ़ाइल का उपयोग करता है, इसलिए इसे बाद में चलाने की कोशिश करते समय यह विफल हो जाता है।

लेकिन मैं happy_birthday-art.txt को एक अलग फ़ोल्डर में स्थापित नहीं करना चाहता हूं। मैं इसे उस फ़ोल्डर में स्थापित करना चाहता हूं जहां happy_birthday.py स्थापित है। इसके अलावा, मैं setup.py में पूर्ण पथ का उपयोग नहीं करना चाहता हूं। मैं अपनी setup.py फ़ाइल को सर्वश्रेष्ठ तरीके से कैसे स्थापित करूं?

+0

का दावा है कि awkardness स्थान http से है। कॉम/ए/5423147/1240268 (यदि आपके पास पैकेज में है तो यह मुफ़्त है) –

उत्तर

13

यदि आपके पास एक एकल फ़ाइल मॉड्यूल है, तो कोई फ़ोल्डर नहीं बनाया जाएगा, आपकी .py फ़ाइल सीधे निर्देशिका में ले जाया जाएगा जिसमें अन्य पायथन मॉड्यूल (/usr/lib/pythonX.X/site-packages/, उदाहरण के लिए) शामिल हैं। यही कारण है कि आप में निर्देशिका बनाने में है:

$ . 
|-- happy_birthday/ 
    |-- __init__.py 
    |-- art.txt 
|-- MANIFEST.in 
|-- README.rst 
|-- setup.py 
3

http://docs.python.org/2/distutils/setupscript.html

"आप एक लक्ष्य निर्देशिका निर्दिष्ट किए बिना फ़ाइलों का एक सरल अनुक्रम के रूप में data_files विकल्प निर्दिष्ट कर सकते हैं, लेकिन यह अनुशंसित नहीं है , और इंस्टॉल कमांड इस मामले में एक चेतावनी प्रिंट करेगा। डेटा फ़ाइलों को सीधे लक्ष्य निर्देशिका में स्थापित करने के लिए, एक खाली स्ट्रिंग निर्देशिका के रूप में दी जानी चाहिए। "

हालांकि, यहां लक्ष्य निर्देशिका नहीं साइट-संकुल फ़ोल्डर है, लेकिन उपसर्ग फ़ोल्डर, कि venv की जड़ है। यदि आप चाहते हैं कि .txt साइट-पैकेज dir में नंगे, तो यह न केवल बदसूरत लगेगा, लेकिन ऐसा लगता है कि वास्तव में समर्थित नहीं है। दूसरी ओर यह env में किसी अन्य स्थान पर स्थापित करने के लिए, "शेयर/doc/foo" में उदाहरण के लिए संभव है: // stackoverflow:

data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],