2012-03-27 5 views
10

Tôi đang cố nhập một mô-đun dữ liệu cython.py.pyx vào một mô-đun người dùng cython.py. Mọi thứ đều tốt, nhưng khi tôi cố gắng gọi user.pyx trong mô-đun python, tôi nhận được lỗi 'ImportError: No module named data'.Cython: ImportError: Không có mô-đun có tên 'myModule': cách gọi một mô-đun cython chứa một cimport đến một nốt sần khác?

Mọi thứ đều nằm trong cùng một thư mục.

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

setup.py My

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 
) 

Chạy ý chí test.py sau nâng lỗi.

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

Ngoại lệ tôi nhận được là

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 

Làm thế nào tôi có thể làm cho việc nhập khẩu? Cảm ơn vì bất kì sự giúp đỡ.

+0

Tại sao bạn chỉnh sửa mã của mình thành mã hoạt động khi mã thực sự chứng minh mã sai? –

+0

@Niklas Tôi thấy quan điểm của bạn. Với chỉnh sửa của tôi, bài đăng trở nên khó hiểu. Rob đăng giải quyết lỗi 'ImportError: không có mô-đun tên người dùng'. Nhưng vấn đề thực tế của tôi là lỗi 'ImportError không có module _data_', mà tôi đã giải quyết bằng cách biên dịch lại tất cả dự án của tôi. Khi bài Rob giải quyết một vấn đề tiềm năng thực sự, tôi đánh dấu nó là câu trả lời, ngay cả khi đó không phải là vấn đề thực tế của tôi. Xin lỗi vì sự nhầm lẫn. Nếu có cách nào tốt hơn, hãy cho tôi biết. –

Trả lời

1

tôi có thể thiếu một cái gì đó về Cython, nhưng tôi nghĩ đó là:

import package.user 
user.doSomething() 
+0

Sai lầm của tôi, trong mã của tôi tôi đã viết 'package.user' như bạn đề nghị. Nhưng tôi đã quên gõ nó khi viết câu hỏi của tôi. Tôi đã sửa chữa câu hỏi của mình. –

+0

Tôi xây dựng lại mọi tệp trong dự án của tôi và nó đã khắc phục được sự cố. Cảm ơn bạn đã giúp đỡ. –

+0

Bạn chắc chắn được chào đón, nhưng có vẻ như bạn đã tự khắc phục sự cố. Vui vì nó hoạt động! – rob

8

tôi gặp phải vấn đề này một lần nữa trong một dự án khác. Để giải quyết nó, đây là những gì tôi đã làm:

  • tất cả các tuyên bố importcimport phải có đủ điều kiện
  • tất cả các mã python phải được chứa trong một rootFolder
  • các setup.py phải cùng cấp hơn các rootFolder
  • tất cả các thư mục trong rooFolder bao gồm rootFolder phải chứa một __init__.py
  • trong setup.py bạn của tiện ích include_dirs phải chứa '.'

Tôi đã tạo một dự án đơn giản minh họa điều này here.
page này đã giúp tôi tạo ra nó.
Nhưng dự án của tôi đơn giản hơn và tôi nghĩ nó sẽ giúp tôi rất nhiều nếu tôi có nó.
Dự án của tôi cũng minh họa cách tự động tạo tất cả các tệp cython trong một dự án.