python - Setup.py के साथ गैर-पायथन फ़ाइलों सहित




distutils (5)

मैं setup.py ऐसी फ़ाइल शामिल कैसे करूं जो कोड का हिस्सा न हो? (विशेष रूप से, यह एक लाइसेंस फ़ाइल है, लेकिन यह कोई और बात हो सकती है।)

मैं फ़ाइल के स्थान को नियंत्रित करने में सक्षम होना चाहता हूं। मूल स्रोत फ़ोल्डर में, फ़ाइल पैकेज की जड़ में है। (यानी शीर्ष स्तर के समान स्तर पर __init__.py ।) मैं ऑपरेटिंग सिस्टम की परवाह किए बिना पैकेज स्थापित होने पर बिल्कुल वहां रहना चाहता हूं। मैं उसको कैसे करू?


Setup.py में सेटअप के तहत (:

setup(
   name = 'foo library'
   ...
  package_data={
   'foolibrary.folderA': ['*'],     # All files from folder A
   'foolibrary.folderB': ['*.txt']  #All text files from folder B
   },

एक वर्कअराउंड का पता लगाया: मैंने अपना lgpl2.1_license.txt को lgpl2.1_license.txt.py बदल दिया, और टेक्स्ट के चारों ओर कुछ ट्रिपल उद्धरण डाले। अब मुझे data_files विकल्प का उपयोग करने की आवश्यकता नहीं है और न ही किसी भी पूर्ण पथ को निर्दिष्ट करने की आवश्यकता है। इसे एक पाइथन मॉड्यूल बनाना बदसूरत है, मुझे पता है, लेकिन मैं इसे पूर्ण पथ निर्दिष्ट करने से कम बदसूरत मानता हूं।


परियोजना रूट में MANIFEST.in को recursive-include साथ recursive-include आवश्यक निर्देशिका include या फ़ाइल नाम के साथ include करें।

include LICENSE
include README.rst
recursive-include package/static *
recursive-include package/templates *

दस्तावेज यहां पाया जा सकता है


मैं बस कुछ ऐसा करना चाहता था जो मैंने पाइथन 2.7 के साथ काम करने के लिए पाया था। ऊपर वर्णित पैकेज_डाटा या डेटा_फाइल जोड़ना मेरे लिए काम नहीं करता था। मैंने उन फ़ाइलों के साथ एक MANIFEST.IN जोड़ा जो मैं चाहता था जो गैर-पायथन फ़ाइलों को टैरबॉल में डाल दें, लेकिन उन्हें आरपीएम के माध्यम से लक्ष्य मशीन पर स्थापित नहीं किया।

अंत में, मैं सेटअप / setuptools में "विकल्प" का उपयोग कर फ़ाइलों को अपने समाधान में प्राप्त करने में सक्षम था। विकल्प फ़ाइलें आपको setup.py से spec फ़ाइल के विभिन्न अनुभागों को संशोधित करने देती हैं। निम्नलिखित नुसार।

from setuptools import setup


setup(
    name='theProjectName',
    version='1',
    packages=['thePackage'],
    url='',
    license='',
    author='me',
    author_email='[email protected]',
    description='',
    options={'bdist_rpm': {'install_script': 'filewithinstallcommands'}},
)

फ़ाइल - MANIFEST.in:

include license.txt

फ़ाइल - filewithinstallcommands:

mkdir -p $RPM_BUILD_ROOT/pathtoinstall/
#this line installs your python files
python setup.py install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
#install license.txt into /pathtoinstall folder
install -m 700 license.txt $RPM_BUILD_ROOT/pathtoinstall/
echo /pathtoinstall/license.txt >> INSTALLED_FILES

जो कुछ आप वर्णन कर रहे हैं उसे पूरा करने के लिए दो कदम उठाएंगे ...

  • फ़ाइल को स्रोत टैरबॉल में जोड़ा जाना चाहिए
  • स्रोत पथ में डेटा फ़ाइल को स्थापित करने के लिए setup.py को संशोधित करने की आवश्यकता है

चरण 1: फ़ाइल को स्रोत टैरबॉल में जोड़ने के लिए, इसे MANIFEST में शामिल करें

फ़ोल्डर में एक मैनिफ़ेस्ट टेम्पलेट बनाएं जिसमें setup.py शामिल है

मैनिफ़ेस्ट मूल रूप से उन सभी फ़ाइलों की एक सूची वाली एक टेक्स्ट फ़ाइल है जिसे स्रोत टैरबॉल में शामिल किया जाएगा।

यहां मेरी परियोजना के लिए मैनिफ़ेस्ट जैसा दिखता है:

  • changelog.txt
  • install.txt
  • license.txt
  • pypreprocessor.py
  • README.txt
  • setup.py
  • test.py
  • TODO.txt

नोट: जबकि एसडीआईटी स्वचालित रूप से कुछ फाइलें जोड़ता है , मैं स्पष्ट रूप से यह सुनिश्चित करने के लिए निर्दिष्ट करता हूं कि यह सुनिश्चित करने के बजाय कि यह क्या करता है और नहीं करता है।

चरण 2: स्रोत फ़ाइल में डेटा फ़ाइल स्थापित करने के लिए setup.py को संशोधित करें

चूंकि आप स्रोत इंस्टॉल फ़ोल्डर में डेटा फ़ाइल (LICENSE.txt) जोड़ना चाहते हैं, इसलिए आपको स्रोत इंस्टॉल पथ से मेल खाने के लिए डेटा इंस्टॉल पथ को संशोधित करने की आवश्यकता है। यह आवश्यक है क्योंकि, डिफ़ॉल्ट रूप से, डेटा फ़ाइलों को स्रोत फ़ाइलों की तुलना में किसी भिन्न स्थान पर स्थापित किया जाता है।

स्रोत स्थापित dir से मेल खाने के लिए डेटा स्थापित dir को संशोधित करने के लिए ...

Distirils से स्थापित डीआईआर जानकारी खींचें:

from distutils.command.install import INSTALL_SCHEMES

स्रोत स्थापित dir से मेल खाने के लिए डेटा इंस्टॉल dir को संशोधित करें:

for scheme in INSTALL_SCHEMES.values():
    scheme['data'] = scheme['purelib']

और, सेटअप करने के लिए डेटा फ़ाइल और स्थान जोड़ें ():

data_files=[('', ['LICENSE.txt'])]

नोट: उपरोक्त चरणों को किसी भी विस्तारित पुस्तकालयों की आवश्यकता के बिना मानक तरीके से वर्णित सटीक रूप से पूरा करना चाहिए।





distutils