पर कॉल करने वाले साइथन पैकेज बनाने के लिए setuptools का उपयोग करके मैं संकुल को संकलित, स्थापित और चलाने का प्रयास कर रहा हूं जिसे हम myPackage
पर कॉल करेंगे। इसमें *.pyx
फ़ाइल है जो लाइब्रेरी fftw
से फ़ंक्शन fftw_set_timelimit()
को कॉल करती है। वर्तमान में, जब मैं एक स्क्रिप्ट clientScript.py
कि पैकेज मैं निम्न त्रुटि संदेश प्राप्त आयात चलाएँ:बाहरी सी लाइब्रेरी
Traceback (most recent call last):
File "clientScript.py", line 5, in <module>
import myPackage.myModule
ImportError: /usr/local/lib/python2.7/dist-packages/myPackage/myModule.so: undefined symbol: fftw_set_timelimit
मैं क्या समझ से (मैं काफी अजगर और cython लिए नया हूँ), सी पुस्तकालय के साथ जोड़ने के लिए अभी तक नहीं है मेरे पैकेज में प्रदर्शन किया। दरअसल, मेरी setup.py
फ़ाइल इस तरह दिखता है:
from setuptools import setup,find_packages
from Cython.Build import cythonize
import os
setup(
name = "myPackage",
version = "0.0.1",
url = "none",
author = "me",
author_email = "[email protected]",
packages=find_packages(),
ext_modules = cythonize("pyClo/pyClo.pyx"),
)
आप देख सकते हैं मेरी setup.py
फ़ाइल setuptools
उपयोग करता है। मैंने ऐसा करने का फैसला किया क्योंकि इसकी सिफारिश Python Packaging User Guide द्वारा की जाती है। हालांकि, Cython documentation में दिए गए निर्देशों के बजाय distutils
का उपयोग करें। लाइब्रेरी को लिंक करना distutils.Extension('file',['file.pyx'],libraries='fftw')
पर कॉल के माध्यम से किया जाता है। setuptools
का उपयोग करके मैं एक ही परिणाम कैसे प्राप्त करूं?
[distutils दस्तावेज़ीकरण] के अनुसार (https://docs.python.org/2/distutils/apiref.html#distutils.core.Extension), 'distutils.core.Extension' पहले तर्क के रूप में लेता है: "_ एक्सटेंशन का पूरा नाम, जिसमें कोई भी पैकेज शामिल है - यानी फ़ाइल नाम या पथनाम नहीं, लेकिन पायथन डॉट नाम_" इसलिए, "myPackage/myModule" 'के बजाय, किसी के पास" myPackage.myModule "होना चाहिए। – SylM
@SylM मैं थोड़ी देर में अजगर का उपयोग नहीं कर रहा हूं ... तो यह मेरे लिए दोबारा जांच करने के लिए कुछ प्रयास होने जा रहा है कि स्लैश को "/" एक बिंदु से बदलना "।" जैसा कि आप सुझाव दे रहे हैं वास्तव में काम करता है। हालांकि अगर आप समाधान का परीक्षण करते हैं और मुझे बताते हैं कि यह ठीक है, तो मैं तदनुसार अपना जवाब संपादित करूंगा। "समाधान का परीक्षण" करके मेरा मतलब है कि स्क्रैच से एक नई परियोजना शुरू करना और सुनिश्चित करना कि आप इसे काम कर सकते हैं। क्या आप ऐसा करना चाहते हैं? ;) –
@GLorieul मैंने बिंदीदार नाम वाक्यविन्यास का उपयोग करके उपर्युक्त टेम्पलेट का उपयोग किया है, और सफलतापूर्वक संकलित किया है। – Gilly