Kể từ khi bạn đề cập đến rằng đây là Python 3, bạn không cần phải thêm phần sau vào các tệp .py
của mình. Tôi sẽ vẫn mặc dù bởi vì nó giúp ngược di động nếu một số cỏ nghèo của những người bị mắc kẹt trên Python 2 nhu cầu sử dụng mã của bạn:
from __future__ import absolute_import
Cho rằng bạn đang sử dụng Python 3, hoặc là bạn đang sử dụng Python 2 và đã bao gồm dòng ở trên, đây là câu trả lời của bạn:
từ main.py
:
import pkg1.util as util
từ test.py
bạn sẽ sử dụng một trong hai cách tùy thuộc vào việc bạn coi pkg1
và pkg2
được những thứ sẽ luôn được triển khai cùng nhau theo cách tương tự liên quan đến nhau, hoặc liệu chúng sẽ luôn được triển khai từng bán độc lập ở cấp cao nhất. Nếu là người đầu tiên, bạn sẽ làm điều này:
from ..pkg1 import util
và nếu đó là lựa chọn thứ hai, điều này:
import pkg1.util as util
Điều này có nghĩa, tất nhiên, rằng bạn luôn chạy Python từ thư mục trong đó main.py
hoặc thư mục đó nằm trong PYTHONPATH
hoặc kết thúc bằng sys.path
vì một số lý do (ví dụ như thư mục gói trang web Python chính).
Nếu một 'pkg1' khác tồn tại vì một số lý do trong' PYPATH', tôi vẫn nhận được * this * 'pkg1' được nhập với cả hai tùy chọn này? –
@aharon: Không có tùy chọn nào hứa hẹn với bạn rằng bạn sẽ nhận được 'pkg1' dự định mà không gây rối với' sys.path' để đảm bảo thư mục thích hợp là đầu tiên trong đường dẫn. Có xung đột tên gói theo cách này là một ý tưởng rất xấu, trừ khi bạn có một hệ thống quản lý gói như 'setuptools' quản lý gói như là một 'gói không gian tên'. – Omnifarious
Sẽ không phải tất cả điều này yêu cầu '__init__py' trong cùng thư mục với' main.py'? Vì nó là, 'test.py' và' util.py' nằm trong các gói hoàn toàn riêng biệt mà không phải là gói con của một gói siêu phổ biến. –