2012-03-07 22 views
9

Tôi đang phát triển phần mềm cho Windows bằng Python. Tôi đang phát triển trên Linux và tôi đang sử dụng Pylint để kiểm tra mã của mình. Tôi không thể loại bỏ lỗi:làm thế nào để nói pylint bỏ qua một số nhập khẩu nhất định?

F| Unable to import '_winreg' 

Điều này hiển nhiên - Python trên Linux không có mô-đun này.

Vì vậy, tôi phải đặt cái gì vào .pylintrc để bỏ qua lỗi này?

Cảm ơn trước, Oz

EDIT:

Documentation nói:

:F0401: *Unable to import %r* 
    Used when pylint has been unable to import a module. 

Bây giờ tôi cần phải tìm cách sử dụng nó ...

giải pháp từng phần:

pylint --disable=F0401 <filename> 

Tôi vẫn đang tìm cách thực hiện thông qua .pylintrc.

Trả lời

6

Đối với những người thực sự muốn bỏ qua mô-đun, tôi đặt ở đây vá nhỏ của tôi cho pylint: Trong '/pylint/checkers/imports.py'

262  def get_imported_module(self, modnode, importnode, modname): 
+263   import sys 
+264   ignoreModules = ['_winreg', 'your', 'bogus','module','name'] 
265   try:   
+266    if sys.platform =='linux2' and modname not in ignoreModules: 
267     return importnode.do_import_module(modname) 
268   except astng.InferenceError, ex: 
269    if str(ex) != modname: 
270     args = '%r (%s)' % (modname, ex) 

chút này hack làm công việc tốt hơn sau đó chỉ cần bỏ qua tất cả các cảnh báo. Tối ưu, nếu tôi sẽ có thời gian tôi sẽ đặt một miếng vá để làm điều đó thông qua tập tin .pylintrc.

+0

Bạn đã bao giờ tìm thấy thời gian để gửi bản vá đó chưa? –

+0

không, khi tôi đăng nó, tôi chưa bao giờ nghĩ về nó. – Oz123

+0

Có vẻ như bản phát hành sắp tới của pylint 1.5.0 sẽ chứa một bản vá như thế này. –

0

[Chỉnh sửa: Đây không phải là giải pháp truy nã kể từ khi một sự thay đổi trong file kiểm tra pylint được yêu cầu, nhưng tôi để nó trong trường hợp mã chính nó có thể được thay đổi, trong đó có thể không phải sau khi một bình luận]:

Đặt một khối thử/trừ xung quanh câu lệnh nhập.

Hoặc thậm chí tốt hơn. cái gì đó như:

CONFIG = 'Unix' 


if CONFIG == 'Unix': 
    import UnixLib 
elif CONFIG == 'Win': 
    import WinLib 
else: 
    assert False 
+4

khá có vấn đề - Tôi muốn pylint bỏ qua nó. không phải để thay đổi mã của tôi, mà nên làm việc trong trường hợp này bởi vì nó là một built-in của python. – Oz123

9

Một giải pháp mà tôi đã thấy tại nơi làm việc của tôi, nơi có một mô-đun đặc biệt mà Pylint không thể có được (Python được nhúng và mô-đun đặc biệt này nằm bên trong thực thi chính, trong khi pylint được chạy thường xuyên Cài đặt Python) là giả lập nó bằng cách tạo một tệp .py và đặt nó vào đường dẫn python khi chạy pylint (xem PyLint "Unable to import" error - how to set PYTHONPATH?).

Vì vậy, bạn có thể có một thư mục "pylint-fakes" chứa số trống _winreg.py (hoặc nếu bạn cần kiểm tra tên đã nhập, không trống nhưng có các biến giả).

+0

Chris, cảm ơn bạn đã gợi ý. Tôi thực sự đã làm tương tự cho một mô-đun được nhúng ở nơi làm việc của chúng tôi quá. Mô-đun giả của tôi chứa tất cả các thành viên của mô-đun thực. Đây cũng là một giải pháp hợp lệ. Bạn nhận được một cuộc bỏ phiếu cho rằng tất nhiên :-) – Oz123

6

Chỉ cần chạy vào này là tốt với đoạn mã sau:

8: if os.name == 'nt': 
9: import msvcrt 
10: else: 
11: import fcntl 

pylintfailed the build với lỗi này:

E: 9, 4: Unable to import 'msvcrt' (import-error) 

Các solution có sẵn từ pylint 0.10:

9: import msvcrt # pylint: disable=import-error 
Các vấn đề liên quan