प्रोजेक्ट रूट डायरेक्टरी में "python setup.py sdist" अवांछित "PROJECT-egg.info" क्यों बनाता है?




setuptools distutils (3)

जब मैं दौड़ता हूं

  python setup.py sdist

यह मेरे ./dist निर्देशिका में एक sdist बनाता है। इसमें मेरे "डिस्ट" फ़ोल्डर के अंदर ज़िप में एक "PROJECT-egg.info" फाइल शामिल है, जिसका मैं उपयोग नहीं करता, लेकिन इससे मुझे कोई दुख नहीं है, इसलिए मैं इसे अनदेखा करता हूं।

मेरा सवाल यह है कि यह मेरी परियोजना रूट निर्देशिका में "PROJECT-egg.info" फ़ोल्डर भी क्यों बनाता है? क्या मैं इसे बनाना बंद कर सकता हूं? यदि नहीं, तो क्या मैं sdist बनाने के तुरंत बाद इसे हटा सकता हूँ?

मैं 'सेटअप' फंक्शन का उपयोग कर रहा हूं जो सेटपूल से आयात किया गया है। WindowsXP, Python2.7, Setuptools 0.6c11, 0.6.14 वितरित करें।

मेरा सेटअप कॉन्फ़िगरेशन ऐसा दिखता है:

{'author': 'Jonathan Hartley',
 'author_email': '[email protected]',
 'classifiers': ['Development Status :: 1 - Planning',
                 'Intended Audience :: Developers',
                 'License :: OSI Approved :: BSD License',
                 'Operating System :: Microsoft :: Windows',
                 'Programming Language :: Python :: 2.7'],
 'console': [{'script': 'demo.py'}],
 'data_files': [('Microsoft.VC90.CRT',
                 ['..\\lib\\Microsoft.VC90.CRT\\Microsoft.VC90.CRT.manifest',
                  '..\\lib\\Microsoft.VC90.CRT\\msvcr90.dll'])],
 'description': 'Utilities for games and OpenGL graphics, built around Pyglet.\n',
 'keywords': '',
 'license': 'BSD',
 'long_description': "blah blah blah",
 'name': 'pygpen',
 'options': {'py2exe': {'ascii': True,
                        'bundle_files': 1,
                        'dist_dir': 'dist/pygpen-0.1-windows',
                        'dll_excludes': [],
                        'excludes': ['_imaging_gif',
                                     '_scproxy',
                                     'clr',
                                     'dummy.Process',
                                     'email',
                                     'email.base64mime',
                                     'email.utils',
                                     'email.Utils',
                                     'ICCProfile',
                                     'Image',
                                     'IronPythonConsole',
                                     'modes.editingmodes',
                                     'startup',
                                     'System',
                                     'System.Windows.Forms.Clipboard',
                                     '_hashlib',
                                     '_imaging',
                                     '_multiprocessing',
                                     '_ssl',
                                     '_socket',
                                     'bz2',
                                     'pyexpat',
                                     'pyreadline',
                                     'select',
                                     'win32api',
                                     'win32pipe',
                                     'calendar',
                                     'cookielib',
                                     'difflib',
                                     'doctest',
                                     'locale',
                                     'optparse',
                                     'pdb',
                                     'pickle',
                                     'pyglet.window.xlib',
                                     'pyglet.window.carbon',
                                     'pyglet.window.carbon.constants',
                                     'pyglet.window.carbon.types',
                                     'subprocess',
                                     'tarfile',
                                     'threading',
                                     'unittest',
                                     'urllib',
                                     'urllib2',
                                     'win32con',
                                     'zipfile'],
                        'optimize': 2}},
 'packages': ['pygpen'],
 'scripts': ['demo.py'],
 'url': 'http://code.google.com/p/edpath/',
 'version': '0.1',
 'zipfile': None}

ध्यान दें कि आप PROJECT.egg PROJECT.egg-info कलाकृतियों को अपने sdist से पूरी तरह से गायब कर सकते हैं।

कमांड setup.py egg_info रूप से अंडे के रूप में सोर्स रूट का उपयोग करेगा, जिसके परिणामस्वरूप PROJECT.egg PROJECT.egg-info डायरेक्टरी को sdist में पैक किया जाएगा।

आप विकल्प --egg-base आधार को पारित करके अंडे के आधार को कॉन्फ़िगर कर सकते हैं। यह PROJECT.egg-info निर्देशिका को कहीं और बनाएगा, जिससे यह आपके स्रोत वितरण से पूरी तरह से बाहर निकल जाएगा। आप उस प्रॉपर्टी को सेट करने के लिए setup.cfg का उपयोग भी कर सकते हैं।

PROJECT.egg PROJECT.egg-info मेरे बिना काम करने के लिए एक कमांडर बनाने के लिए निम्न कमांड:

python setup.py egg_info --egg-base /tmp sdist

या एक setup.cfg :

[egg_info]
egg_base = /tmp

पायथन पैकेजिंग और निर्माण प्रणाली टूटी हुई इम्हो है। तो कई हैक्स और वर्कअराउंड चीजें हैं जो एक बॉक्स के बाहर काम करेंगे।

हालाँकि, * .egg-info को हटाने के लिए मुझे मिली "सबसे साफ" हैक ने सामान्य clean --all स्विच का उपयोग किया है। साथ ही egg_info फाइल को सबफ़ोल्डर में रखें जिसे क्लीन कमांड द्वारा साफ किया जाएगा। । यहाँ एक उदाहरण है:

अपने setup.cfg कुछ इस तरह का उपयोग करें:

[egg_info]
egg_base = ./build/lib

कहाँ ./build/lib एक ऐसा फ़ोल्डर है जो clean --all हटा देगा। तब जब सेटपूल के साथ अपनी परियोजना का निर्माण करते हैं - स्वच्छ ध्वज के साथ स्वच्छ कमांड का उपयोग करते हैं, जैसे

python setup.py bdist_wheel clean --all

यदि आप एक स्रोत बंडल बनाना चाहते हैं और साथ ही साथ sdist से पहले bdist_wheel का निर्माण सुनिश्चित करें ताकि बिल्ड / लिबर फ़ोल्डर मौजूद हो, जैसे:

python setup.py bdist_wheel sdist clean --all


-egg.info फ़ोल्डर हमेशा एक अस्थायी कलाकृति नहीं है जिसे आप हटा सकते हैं।

उदाहरण के लिए, यदि आप एक "संपादन योग्य" स्थापित करने के लिए pip install -e YOURPACKAGE उपयोग करते हैं, तो " pip install -e YOURPACKAGE के माध्यम से काम करता है (जैसे कि python setup.py develop pip install -e YOURPACKAGE python setup.py develop ताकि आपको हर बार स्थानीय स्तर पर संपादित किए जाने पर पैकेज को फिर से स्थापित न करना -egg.info जब आपके पैकेज को किसी अन्य स्रोत में आयात किया जाता है तो -egg.info फ़ोल्डर रनटाइम पर आवश्यक होता है। यदि यह मौजूद नहीं है, तो आपको एक DistributionNotFound त्रुटि मिलेगी।





setup.py