2014-07-02 17 views
14

के साथ साइथन-संकलित पायथन कोड बिल्डिंग मैं PyInstaller के साथ एक पायथन बहु-फ़ाइल कोड बनाने की कोशिश कर रहा हूं। इसके लिए मैंने Cython के साथ कोड संकलित किया है, और .py फ़ाइलों के स्थान पर उत्पन्न .so फ़ाइलों का उपयोग कर रहा हूं।PyInstaller

1 फ़ाइल मान लिया जाये कि main.py है और आयातित लोगों file_a.py और file_b.py, मैं file_a.so और file_b.so Cython संकलन के बाद प्राप्त कर रहे हैं।

जब मैं एक फ़ोल्डर में main.py, file_a.so और file_b.so रख दिया और "python main.py" द्वारा इसे चलाने, यह काम करता है।

लेकिन जब मैं इसे PyInstaller के साथ बनाता हूं और निष्पादन योग्य उत्पन्न करने की कोशिश करता हूं, तो यह file_a और file_b में किए गए आयात के लिए त्रुटियों को फेंकता है।

यह कैसे तय किया जा सकता है? एक समाधान main.py में सभी मानक मॉड्यूल आयात करना है और यह काम करता है। लेकिन अगर मैं अपना कोड बदलना नहीं चाहता, तो समाधान क्या हो सकता है?

उत्तर

12

तो मुझे यह आपके लिए काम करने के लिए मिला।

कृपया Bundling Cython extensions with Pyinstaller

त्वरित आरंभ पर एक नजर है:

git clone https://github.com/prologic/pyinstaller-cython-bundling.git 
cd pyinstaller-cython-bundling 
./dist/build.sh 

यह एक स्थैतिक द्विआधारी पैदा करता है:

$ du -h dist/hello 
4.2M dist/hello 
$ ldd dist/hello 
    not a dynamic executable 

और उत्पादन का उत्पादन:

$ ./dist/hello 
Hello World! 
FooBar 

मूल रूप से यह एक सरल setup.py कि एक्सटेंशन file_a.so और file_b.so बनाता है और फिर pyinstaller का उपयोग करता है एक भी executebla में आवेदन एक्सटेंशन बंडल करने के उत्पादन के लिए नीचे आया था।

उदाहरण setup.py:

from glob import glob 
from setuptools import setup 
from Cython.Build import cythonize 


setup(
    name="test", 
    scripts=glob("bin/*"), 
    ext_modules=cythonize("lib/*.pyx") 
) 

एक्सटेंशन का निर्माण:

$ python setup.py develop 

आवेदन Bundling:

$ pyinstaller -r file_a.so,dll,file_a.so -r file_b.so,dll,file_b.so -F ./bin/hello 
+1

यह पूरी तरह से काम करता है। इसे सब एक साथ रखने के लिए धन्यवाद! – rth

+0

हाँ कोई चिंता नहीं! यह * काफी * मजेदार था! –

+0

क्या इसके लिए कोई खिड़कियां बराबर है? ./dist/build.sh को सिग्विन – Tetora

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