में पुस्तकालयों को नहीं देखता है मैं कुछ ओपन सोर्स अकादमिक कोड काम करने की कोशिश कर रहा हूं (प्रोजेक्ट होम here है)। यह एक (बहुत) पतला पायथन आवरण वाला एक बड़ा सी ++ कोडबेस है जो सी ++ को लोड करने के लिए CDLL
का उपयोग करता है और कोड के आदिम पायथन स्क्रीप्टिंग को अनुमति देने के लिए उपलब्ध कुछ सी फ़ंक्शंस को कॉल करता है।सीडीएलएल के साथ पायथन लोडिंग सी lib, पाइथन पथ
हालांकि, शुरुआती आयात कोड दुर्घटनाओं क्योंकि यह साइट-संकुल में यह के बगल में बैठे .so फ़ाइलें नहीं मिल सकता है:
from ctypes import *
try:
self.lib = CDLL("_lammps.so")
except:
try:
self.lib = CDLL("_lammps_serial.so")
except:
raise OSError,"Could not load LAMMPS dynamic library"
और एक स्क्रिप्ट में:
स्थापित फ़ाइल मेंया दुभाषिया:
from lammps import lammps
l = lammps()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "lammps.py", line 42, in __init__
raise OSError,"Could not load LAMMPS dynamic library"
OSError: Could not load LAMMPS dynamic library
अन्य उत्तर might seem to have this covered, लेकिन यह केवल काम करता है अगर CDLL()
स्क्रिप्ट वास्तव में लागू भीतर कहा जाता है (या कार्यशील निर्देशिका दुभाषिया चलाने वाले संकेत का) - यानी अगर 'सापेक्ष पथ' पाइथन-लाइब्रेरी-स्पेस के बजाय उपयोगकर्ता-स्थान में है।
हम एक सी/सी ++ लाइब्रेरी आयात करने के लिए विश्वसनीय रूप से कैसे स्थापित करते हैं जिसे हमने स्वयं बनाया है? /usr/lib
जैसे सिस्टम लाइब्रेरी स्थानों को प्रदूषित करने का छोटा, जो बहुत पाइथनिक नहीं है, मुझे एक आसान समाधान नहीं दिखाई दे रहा है।
(संपादित करें: ठीक किया समारोह के नाम, स्पष्ट नहीं रिफैक्टरिंग बेकार खेद है!!) Strace -eopen तहत
आगे: प्रश्न में पुस्तकालय में एक प्रतीक गायब था, इसलिए इस कोड में एक अलग त्रुटि मास्क हो सकती थी; आपको यह नहीं समझना चाहिए कि सिस्टम अपवाद क्या है और अपना खुद का फेंक दो! वास्तव में, प्रश्न आगे की जांच के बाद भी वैध है; सिस्टम * पहली बार सही त्रुटि फेंक रहा था (मैंने एसएसओ को '/ usr/lib' पर कॉपी करके और इंटरैक्टिव प्रॉम्प्ट से' सीडीएलएल() 'चलाकर इसका परीक्षण किया।) – tehwalrus