Điều này cũng liên quan đến cơ chế nhập của Python, đặc biệt với việc sử dụng import
có liên quan. Sử dụng Python 2.7.9 và Fabric 1.10.0, tạo ba tệp sau:
fabfile.py:
từ một lần nhập khác_hello
chắc chắn xin chào():
in 'xin chào thế giới'
cái khác_hello()
khác.py:
chắc chắn another_hello():
từ văn bản nhập bí mật
print 'Xin chào thế giới!'
in 'văn bản: ' + TEXT
bí mật/__init__.py:
(Đồng thời tạo thư mụcbí mật/
)
TEXT = 'bí mật'
thử ngay bây giờ tuyệt vời xin chào
. Nó nhắc:
Tệp "/home/sergey/projects/Bask/service/t/fabfile.py", dòng 4, trong hello
cái khác_hello()
Tệp "/home/sergey/projects/Bask/service/t/another.py", dòng 2, trong another_hello
từ văn bản nhập bí mật
ImportError: Không có mô-đun nào có tên bí mật
Đồng thời, bạn có thể dễ dàng khởi động trình thông dịch và nhậpNhập lời chào từ fab;
. Hoạt động hoàn hảo:
Trong [2]: từ nhập fabfile xin chào;
xin chào thế giới
Xin chào thế giới!
văn bản: bí mật
为什么会有这种差异?
Bây giờ tôi đã tìm ra một thủ thuật để thực hiện việc này. Chỉ cần thay đổi bí mật nhập khẩu
添加到 fabfile.py
Chỉ cần bắt đầu với . Tôi nghĩ chuyện đã xảy ra là tuyệt vời
Công cụ đang mở fabfile.py
để tìm một nhiệm vụ cụ thể chỉ áp dụng cho phù hợp PYTHONPATH
, nhưng sau khi nó đã nhập tác vụ và bắt đầu thực sự chạy nó thì có gì đó sẽ thay đổi khiến nó không thể truy cập vào thư mục gốc nữa.
Liệu kỹ thuật của tôi có hiệu quả không? Nhưng nó không phá vỡ sự đóng gói, nói lần cuối, bởi vì fabfile.py
nên biết về bất kỳ chức năng hoặc phương thức nào nó gọitất cả sự phụ thuộc gián tiếp? Có lẽ điều này trái ngược với một chức năng import
Lập luận cho tuyên bố?
Đây là sự cố đã biết trong Fabric. Có một số vấn đề về nó trong trình theo dõi vấn đề Fabric trên Github. Nhìn thấy vấn đề #256例如。
解决方法
bạn có thể đặt
từ văn bản nhập bí mật
hiện hữukhác.py
Dòng đầu tiên hoặc thêm thư mục hiện tại vào đường dẫn tìm kiếm mô-đun.
chắc chắn another_hello():
import sys
sys.path.insert(0, '')
từ văn bản nhập bí mật
print 'Xin chào thế giới!'
in 'văn bản: ' + TEXT
Tôi là một lập trình viên xuất sắc, rất giỏi!