2013-01-08 18 views
5

यह उन डेवलपर्स के लिए एक बहुत ही आम प्रश्न होना चाहिए जिन्होंने इंस्टॉलेशन पैकेज बनाने के लिए "setup.py" का उपयोग किया था और इसे पहले पूछा जाना चाहिए लेकिन मुझे कहीं भी उचित उत्तर नहीं मिला।किसी भी पायथन फ़ंक्शन को "data_files" रूट निर्देशिका प्राप्त करने के लिए?

sudo अजगर का setup.py

from distutils.core import setup 
setup(
    ...., 
    ...., 
    data_files=[('MyApp/CBV', ['myapp/data/CBV/training.cbv', 'myapp/data/CBV/test.cbv'])], 
    ...., 
    ...., 
    ) 

परिणाम में setup.py ऊपर परिणाम का उपयोग कर

running install 
running build 
running build_py 
running build_scripts 
running install_lib 
running install_scripts 
running install_data 
creating /usr/local/MyApp/CBV 
copying MyApp/data/CBV/training.cbv -> /usr/local/MyApp/CBV 
copying MyApp/data/CBV/test.cbv -> /usr/local/MyApp/CBV 
running install_egg_info 
Removing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info 
Writing /usr/local/lib/python2.7/dist-packages/MyApp-0.1.0.egg-info 

अवलोकन से स्थापित करते हैं, "/ usr/स्थानीय" है "data_files" रूट निर्देशिका। हार्डकोडिंग के अलावा, क्या कोई पाइथन फ़ंक्शन है जो मुझे यह "data_files" रूट निर्देशिका दे सकता है?

मार्टिन पीटर्स से सुझाव के साथ , यहाँ मेरी समाधान

setup.py

from setuptools import setup 
setup(
    ...., 
    ...., 
    package=['myapp'], 
    package_data={'': ['data/CBV/*.cbv']}, 
    ...., 
    ...., 
    ) 

प्रयोग

import pkg_resources 

my_data_file = pkg_resources.resource_filename(__name__, 'data/CBV/test.cbv') 
print my_data_file 

उत्तर

6

डिफ़ॉल्ट रूप से, में जब एक पैकेज को स्थापित करने है रूट के रूप में, डेटा पथपर आधारित हैप्लस आपका प्रोजेक्ट नाम, मुझे विश्वास है, ताकि आप उस पर आधारित अपनी फाइलें पुनर्प्राप्त कर सकें।

setuptools एक्सटेंशन distutils पर विस्तार से बेहतर होगा और डेटा फ़ाइलों को लोड करने के लिए pkg_resources module Resource API का उपयोग करें। यह इस उद्देश्य के लिए setuptools के साथ आता है।

आप चाहते हैं कि पैकेज में आपकी डेटा फ़ाइलों को सर्वोत्तम रूप से काम करने के लिए शामिल किया जाए। Including data files देखें (setuptools प्रलेखन में)। वर्तमान में, मैं "distutils" से "सेटअप" का उपयोग कर रहा

from pkg_resources import resource_string 

foo_config = resource_string(__name__, 'foo.conf') 
+0

:

फिर आप संसाधन फ़ाइलों के साथ सीधे उदाहरण के लिए resource_string के साथ एक स्ट्रिंग में लोड कर सकते हैं। यह जांचने में कुछ समय लग सकता है कि आपका समाधान मेरी मदद कर सकता है :) –

+0

@ जेसेडा थुतकोवाकोरैपिन: 'setuptools' पर स्विच करना काफी आसान है। :-) यह पीछे हटने योग्य 'distutils' के लिए संगत है, और निश्चित रूप से अनुशंसित! –

+0

जबकि मैं disutils और setuptools के बीच अंतर की तलाश में था, मैंने पाया कि http://stackoverflow.com/questions/6344076/differences-between-distribute-distutils-and-setuptools। जो मैंने लगभग पढ़ा है, ऐसा लगता है कि सुझाव disutils2 की ओर जा रहा था। क्या आप अभी भी setuptools की सिफारिश करते हैं? –

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

  • कोई संबंधित समस्या नहीं^_^