2012-05-04 21 views
13

Tôi đang kiểm tra mô-đun có Pylint. Dự án có cấu trúc này:Pylint: Nhập tương đối phải là

/builder 
    __init__.py 
    entity.py 
    product.py 

Trong sản phẩm tôi nhập khẩu thực thể như thế này:

from entity import Entity 

nhưng pylint than thở rằng:

************* Module builder.product 
W: 5,0: Relative import 'entity', should be 'builder.entity' 

Tuy nhiên from builder.entity import Entity không nhận gói, và from ..builder.entity import Entity cũng không hoạt động. Pylint phàn nàn về điều gì? Cảm ơn

Trả lời

14

Python 2.5 giới thiệu các lần nhập tương đối. Chúng cho phép bạn làm

from .entity import Entity 
+1

Cảm ơn bạn cho -1 mà không cần thông báo lý do. – glglgl

+3

Ý của bạn là "đủ mới"? – PlasmaBinturong

+0

@PlasmaBinturong "đủ mới" đề cập đến việc giới thiệu nhập khẩu tương đối trong Python 2.5 hoặc hơn. – glglgl

0

câu trả lời của glglgl là chính xác nếu bạn có phiên bản Python mới hơn.

Tuy nhiên, nếu bạn không phải đảm bảo rằng gói bạn đang xác thực nằm trong số PYTHONPATH. Xem các ví dụ bên dưới.

[sebastian ~/tmp/testpy]$ pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
F: 1: Unable to import 'testpy.b' 
[sebastian ~/tmp/testpy]$ PYTHONPATH=".." pylint -r n a.py 
************* Module a 
C: 1: Missing docstring 
+0

tôi có __init__.py, cảm ơn vì đã chỉ ra, tôi đã chỉnh sửa câu hỏi của mình. – pistacchio

0

gì bạn nhận được nếu bạn bao gồm các dòng sau ở đầu product.py:

import builder 
print builder 

Tôi đoán là bạn đang nhập khẩu một mô-đun khác nhau/gói builder từ một số nơi ở của bạn PYTHONPATH trước khi bạn đang sử dụng.

6

Tệp __init__.py làm cho pylint nghĩ mã của bạn là một gói (cụ thể là "người xây dựng").

Do đó khi pylint nhìn thấy "từ thực thể nhập khẩu thực thể", nó phát hiện nó đúng cách như là nhập khẩu tương đối tương đối (bạn có thể thực hiện nhập khẩu tương đối rõ ràng bằng '.' Kể từ python 2.6, như các áp phích khác đã được quảng cáo) và báo cáo.

Sau đó, nếu "từ builder.entity import Entity" không hoạt động, đó là PYTHONPATH pb: đảm bảo thư mục chứa thư mục "builder" nằm trong PYTHONPATH của bạn (một pb thay thế được đề xuất bởi gurney alex). Trừ khi bạn không có ý định viết một gói, sau đó loại bỏ __init__.py có lẽ là con đường để đi.

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