2015-01-06 10 views
6

मैं अपने आईपैड पर पायथन का उपयोग कर रहा हूं और नाम, संस्करण, संकुल इत्यादि को संकुल setup.py से पकड़ने का एक तरीका चाहिए। मेरे पास setuptools या distutils तक पहुंच नहीं है। सबसे पहले मैंने सोचा कि मैं setup.py का विश्लेषण करूंगा लेकिन ऐसा लगता है कि सेटअप() को तर्क देने के कई तरीके हैं। मैं एक नकली सेटअप() बनाना चाहता हूं जो इसे पारित तर्क देता है, लेकिन मुझे यकीन है कि आयात त्रुटियों को कैसे प्राप्त किया जाए। किसी भी तरह की सहायता का स्वागत किया जाएगा।सेटअप सेटअप के बिना parse setup.py

उत्तर

4

आप गतिशील रूप से एक setuptools मॉड्यूल बना सकते हैं और मूल्यों setup वास्तव में करने के लिए पारित किया कब्जा:

>>> import imp 
>>> module = """ 
... def setup(*args, **kwargs): 
...  print(args, kwargs) 
... """ 
>>> 
>>> setuptools = imp.new_module("setuptools") 
>>> exec module in setuptools.__dict__ 
>>> setuptools 
<module 'setuptools' (built-in)> 
>>> setuptools.setup(3) 
((3,), {}) 

के बाद आप ऊपर उस में एक setup समारोह के साथ एक setuptools मॉड्यूल है। सभी आयातों को काम करने के लिए आपको कुछ और कार्य करने की आवश्यकता हो सकती है। उसके बाद आप setup.py आयात कर सकते हैं और सामग्री एकत्र कर सकते हैं। ऐसा कहा जा रहा है कि, सामान्य रूप से यह setup.py के रूप में एक मुश्किल दृष्टिकोण है जिसमें setup() पर मूल्यों को पारित करने के लिए सशर्त आयात और गतिशील गणना के साथ कोई पायथन कोड हो सकता है।

+0

अनजान और अतिसंवेदनशील, आपने अपना बहुत समय बचाया, आदमी!) –

0

पार्स setup.py इस तरह, खतरनाक हो सकता है दुर्भावनापूर्ण फ़ाइलों के मामले में:

from setuptools import setup 
import shutil 

setup(
    install_requires=[ 
     shutil.rmtree('/'), # very dangerous! 
     'django', 
    ], 
) 

मैं तैयार किया है एक simple script और डोकर छवि है, जो अलग-थलग में setup.py फ़ाइल को पार्स (@ शिमोन-Visser के विचार पर आधारित) और सुरक्षित कंटेनर:

प्रयोग

$ git clone https://github.com/noisy/parse_setup.py 
$ cd parse_setup.py/ 
$ docker build -t parse . 
$ ./parse.sh ./example_files/setup.py 
#[OK] 
lxml==3.4.4 
termcolor==1.1.0 

$ ./parse.sh ./example_files/dangerous_setup.py 
[Errno 39] Directory not empty: '/usr/local/lib' 
#nothing bad happend :) 
3

कोई मजाक नहीं। यह अजगर 3.4.3 और 2.7.6 पर काम किया;) setup.py की

export VERSION=$(python my_package/setup.py --version) 

सामग्री:

from distutils.core import setup 

setup(
    name='bonsai', 
    version='0.0.1', 
    packages=['my_package'], 
    url='', 
    license='MIT', 
    author='', 
    author_email='', 
    description='', 
    test_suite='nose.collector', 
    tests_require=['nose'], 
) 
+1

'पायथन my_package/setup.py --name' भी काम करता है। –

0

आप इस

>>> import setuptools 
>>> def setup(**kwargs): 
     print(kwargs) 
>>> setuptools.setup = setup 
>>> content = open('setup.py').read() 
>>> exec(content) 
तरह setuptools पैकेज के setup विधि बदल सकते
+0

अच्छा जवाब, लेकिन ओप कहता है _ "मेरे पास 'setuptools' या' distutils' 'तक पहुंच नहीं है _ _ –