2017-08-01 18 views
8

Hiện đang cố gắng làm việc trong Python3 và sử dụng nhập khẩu tuyệt đối để nhập một mô-đun vào một mô-đun khác nhưng tôi gặp lỗi ModuleNotFoundError: No module named '__main__.moduleB'; '__main__' is not a package. Xem xét cấu trúc dự án này:ModuleNotFoundError: Không có mô-đun có tên '__main __. Xxxx'; '__main__' không phải là gói

proj 
    __init__.py3 (empty) 
    moduleA.py3 
    moduleB.py3 

moduleA.py3

from .moduleB import ModuleB 
ModuleB.hello() 

moduleB.py3

class ModuleB: 
    def hello(): 
     print("hello world") 

Sau đó chạy python3 moduleA.py3 cung cấp cho các lỗi. Những gì cần phải được thay đổi ở đây?

Cảm ơn bạn!

+0

Hàng đầu '.' chỉ hoạt động theo cách bạn muốn khi tệp nằm trong gói. – anonymoose

+2

@anonymoose là "proj" không phải là một gói? vì nó có __init __. py3? – mpseligson

+1

Bạn không thể sử dụng hàng đầu '.' trong nhập khẩu và có nó làm việc theo cách bạn muốn nó khi bạn đang chạy các tập tin trực tiếp với Python. Bạn phải nhập tệp. Nếu bạn đặt một tập tin khác bên ngoài 'proj' có' import moduleA' trong nó, tôi tin rằng bạn sẽ thấy đầu ra mà bạn mong đợi. – anonymoose

Trả lời

2

.moduleB là một lần nhập tương đối. Tương đối chỉ hoạt động khi mô-đun chính được nhập hoặc tải trước. Điều đó có nghĩa là bạn cần phải nhập proj vào một nơi nào đó trong môi trường thời gian chạy hiện tại của mình. Khi bạn đang sử dụng lệnh python3 moduleA.py3, sẽ không có cơ hội nhập mô-đun chính. Bạn có thể:

  • from proj.moduleB import moduleB HOẶC
  • Bạn có thể tạo kịch bản khác, giả sử run.py, để gọi from proj import moduleA

Chúc may mắn với cuộc hành trình của mình đến vùng đất tuyệt vời của Python.

Các vấn đề liên quan