2013-07-22 9 views
12

पायथन दस्तावेज़ (http://www.python.org/dev/peps/pep-0396/) पढ़ने के बाद मैं संकुल के लिए __version__ विशेषता को सेट करने के तरीके से पहले अधिक उलझन में था। उन्हें setup.py फ़ाइल में डालने का उल्लेख किया गया है, जो मुझे भ्रमित करता है: यह my_package.__version__ के रूप में उपलब्ध नहीं होगा, है ना?पाइथन पैकेज के लिए __version__ विशेषता बनाना बिना परेशानी के

मैं एक अलग फ़ाइल से संस्करण विशेषता आयात करने के लिए समाप्त हुआ।

तो मेरी "संस्करण" फ़ाइल आमतौर पर

my_package/ 
    __init__.py 
    my_module1/ 
     ... 
    my_module2/ 
     ... 
    my_module3/ 
     ... 
    info/ 
     __init__.py 
     version.py 
      __version__ = '0.1.0' 

है और ऊपरवाला __init__.py में मैं info.version से __version__ विशेषता आयात:

import __version__

ताकि एक के माध्यम से संस्करण संख्या प्राप्त कर सकते हैं

my_package.__version__ 

मैं बस सोच रहा हूं कि यह "ठीक है" दृष्टिकोण है, और अगर ऐसा कुछ करने के खिलाफ कुछ बोलता है? मैं आपकी राय और सुझावों की प्रतीक्षा कर रहा हूं!

+5

निकट से संबंधित में परिभाषित जैसी चीजों को लाने के लिए: [क्या पैकेज साझा करने के लिए सही तरीका क्या है setup.py और पैकेज के साथ संस्करण?] (http://stackoverflow.com/q/17583443), जिसके लिए आपको 'distutils' के बजाय' setuptools' का उपयोग करना आवश्यक है। नहीं, 'setup.py' में संस्करण को सेट करने से यह' my_package .__ version__' 'के रूप में उपलब्ध नहीं होगा। –

+0

मैं अन्य धागे की जांच करूंगा, धन्यवाद! – Sebastian

उत्तर

1

आपने यह नहीं कहा है कि आप setup.py में संस्करण संख्या कैसे प्राप्त करते हैं, लेकिन सामान्य import my_package दृष्टिकोण के साथ इसे आयात करने का प्रयास न करें। जब आप setup.py चलाते हैं तो पैकेज स्थापित नहीं किया गया है!

मेरा सामान्य दृष्टिकोण setup.py में संस्करण संख्या को परिभाषित करना है और संस्करण संख्या बदलते समय setup.py (re) पैकेज के शीर्ष स्तर __init__.py फ़ाइल उत्पन्न करना है। यह करना आसान है अगर __init__.py फ़ाइल में कोई अन्य कोड नहीं है।

+1

हां, यह एक हैक की तरह लगता है जो काम करेगा! अभी, मेरे पास मूल रूप से 'setup.py' में परिभाषित एक संस्करण संख्या है और एक __init __। Py' में परिभाषित है - यह तब तक ठीक काम करता है जब तक कि आप पैकेज को अपडेट करते समय इनमें से किसी एक को बदलना न भूलें ...: P – Sebastian

4

एक समाधान फ़ाइल में __version__ को परिभाषित करना और setup.py के भीतर से पढ़ना है। इसका मतलब है कि आपको केवल एक ही स्थान में संस्करण को बदलना होगा। मैं एक छोटे से समारोह है कि यह कर देगा लिखा है:

from setuptools import setup 
import re 

def get_property(prop, project): 
    result = re.search(r'{}\s*=\s*[\'"]([^\'"]*)[\'"]'.format(prop), open(project + '/__init__.py').read()) 
    return result.group(1) 

project_name = 'YOUR PROJECT' 
setup(
    ..., 
    version = get_property('__version__', project_name), 
    ..., 
) 

आप भी इस का उपयोग कर सकते __author__ या कुछ और __init__.py फ़ाइल

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