2012-03-27 10 views
10

मैं एक साइथन मॉड्यूल data.pyx को अन्य साइथन मॉड्यूल user.pyx में आयात करने का प्रयास कर रहा हूं। सबकुछ ठीक संकलित करता है, लेकिन जब मैं एक पायथन मॉड्यूल में user.pyx को कॉल करने का प्रयास करता हूं, तो मुझे त्रुटि मिलती है 'ImportError: कोई मॉड्यूल नाम डेटा नहीं'।साइथन: आयात त्रुटि: 'myModule' नामक कोई मॉड्यूल नहीं: एक साइथन मॉड्यूल को कैसे कॉल करें जिसमें एक अन्य साइथन नोड्यूल में एक सीमपोर्ट होता है?

सब कुछ एक ही निर्देशिका में है।

package/ 
    __init__.py #empty 
    setup.py  
    data.pxd 
    data.pyx 
    user.pyx 

मेरे setup.py

from distutils.core import setup 
from distutils.extension import Extension 
from Cython.Distutils import build_ext 


ext_modules = [ 
    Extension("data", ["data.pyx"]), 
    Extension("user", ["user.pyx"],include_dirs = ['myPackageDir']) 
    ] 

setup(
    name = 'app', 
    cmdclass = {'build_ext': build_ext}, 
    ext_modules = ext_modules 
) 

निम्नलिखित test.py इच्छा रनिंग त्रुटि उठाया।

import user  #this line raised the 'ImportError: No module named data' below 
user.doSomething() 

अपवाद मैं

Traceback: 
File "test.py", line 1, in <module> 
    import package.user 
    File "user.pyx", line 1, in init user (user.c:3384) 
ImportError: No module named data 

मैं आयात काम कर सकते हैं कैसी है? किसी भी मदद के लिए धन्यवाद।

+0

आपने अपना कोड कोडिंग कोड में क्यों संपादित किया जब इसे वास्तव में गलत कोड प्रदर्शित करना चाहिए? –

+0

@ निकलास मैं तुम्हारा बिंदु देखता हूं। मेरे संपादन के साथ, पोस्ट भ्रमित हो जाता है। रॉब पोस्ट त्रुटि 'हल त्रुटि: उपयोगकर्ता नामित कोई मॉड्यूल' हल करता है। लेकिन मेरी वास्तविक समस्या त्रुटि 'importError कोई मॉड्यूल नाम नहीं है _data_', जिसे मैंने अपनी सभी परियोजनाओं को पुन: संकलित करके हल किया। चूंकि रॉब पोस्ट एक वास्तविक संभावित समस्या हल करता है, इसलिए मैंने इसे उत्तर के रूप में चिह्नित किया, भले ही यह मेरी वास्तविक समस्या न हो। गलतफहमी के लिए खेद है। यदि कोई बेहतर तरीका है, तो कृपया मुझे बताएं। –

उत्तर

1

मैं Cython के बारे में कुछ याद आ रही हो सकता है, लेकिन मुझे लगता है कि:

import package.user 
user.doSomething() 
+0

मेरी गलती, मेरे कोड में मैंने आपको 'package.user' लिखा था जैसा कि आप सुझाव देते हैं। लेकिन मैं अपना प्रश्न लिखते समय इसे लिखना भूल गया। मैंने अपना प्रश्न सही कर दिया है। –

+0

मैंने अपनी परियोजना में हर फाइल का पुनर्निर्माण किया और इसने समस्या को ठीक कर दिया है। आपकी सहायता के लिए धन्यवाद. –

+0

आप निश्चित रूप से स्वागत करते हैं, लेकिन ऐसा लगता है जैसे आपने स्वयं को समस्या ठीक कर दी है। खुशी है कि यह काम कर रहा है! – rob

8

मैं एक अन्य परियोजना में फिर से इस समस्या का सामना। इसे हल करने के लिए, यहाँ मैं क्या किया है:

  • सभी import और cimport बयान पूरी तरह से योग्य
  • सभी अजगर कोड एक rootFolder
  • setup.py में समाहित किया जाना चाहिए की तुलना में एक ही स्तर पर होना चाहिए होना चाहिए rootFolder
  • सभी सहित rootFolder चाहिए rooFolder में फ़ोल्डर एक __init__.py
  • अपने setup.py में
  • शामिल एक्सटेंशन की include_dirs चाहिए '.'

मैं एक साधारण परियोजना जो इस here दिखाता बनाई गई हैं।
यह page ने इसे बनाने में मेरी सहायता की।
लेकिन मेरी परियोजना सरल है और मुझे लगता है कि अगर यह था तो इससे मुझे बहुत मदद मिलेगी।
मेरी परियोजना यह भी बताती है कि एक परियोजना में स्वचालित रूप से सभी साइथन फ़ाइलों को कैसे बनाया जाए।

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