Các vấn đề nhập chưa được giải quyết với PyDev và Eclipse


108

Tôi rất mới đối với PyDev và Python, mặc dù tôi đã sử dụng Eclipse cho Java rất nhiều. Tôi đang cố gắng làm việc thông qua một số ví dụ Dive Into Python và điều này cảm thấy giống như một vấn đề cực kỳ nhỏ đang trở nên cực kỳ khó chịu. Tôi đang sử dụng Ubuntu Linux 10.04.

Tôi muốn có thể sử dụng tệp odbchelper.py, nằm trong thư mục /Desktop/Python_Tutorials/diveintopython/py

Đây là tệp example.py của tôi mà tôi đang làm việc trong dự án PyDev / Eclipse của mình:

import sys
sys.path.append("~/Desktop/Python_Tutorials/diveintopython/py")

Điều này hoạt động tốt, nhưng sau đó tôi muốn dòng mã tiếp theo của mình là:

import odbchelper

và điều này gây ra lỗi nhập không được giải quyết mọi lúc. Tôi đã thêm __init__.pytệp vào mọi thư mục có thể và nó không giúp được gì. Tôi đã thử thêm từng __init__.pytệp một vào các cấp thư mục khác nhau giữa vị trí dự án và tệp odbchelper.py và tôi cũng đã thử thêm các __init__.pytệp vào tất cả các thư mục ở giữa cùng một lúc. Không hoạt động.

Tất cả những gì tôi muốn làm là có một dự án ở đâu đó trong một số thư mục khác, chẳng hạn /Desktop/MyStuff/Project, trong đó tôi có example.py ... và sau đó từ example.py, tôi muốn nhập odbchelper.py từ/Desktop/Python_Tutorials/diveintopython/py/

Mọi phản hồi trên bảng tin tôi có thể tìm thấy chỉ cần nói sử dụng sys.path.append()chức năng để thêm thư mục này vào đường dẫn của tôi, rồi nhập nó ... nhưng đó chính xác là những gì tôi đang làm trong mã của mình và nó không hoạt động.

Tôi cũng đã thử thủ thuật Ctrl- 1để loại bỏ thông báo lỗi, nhưng chương trình vẫn không hoạt động chính xác. Tôi nhận được một lỗi , ImportError: No module named odbchelper. Vì vậy, rõ ràng là không nhận được đường dẫn được thêm vào, hoặc có một số vấn đề mà tất cả các hoán vị của tôi khi thêm __init__.pytệp đã bỏ lỡ.

Thật khó chịu khi một thứ đơn giản thế này ... gọi những thứ từ một số tệp tồn tại ở một nơi khác trên máy của tôi ... đòi hỏi nhiều nỗ lực như vậy.


Đảm bảo rằng cách viết hoa (viết hoa) là đúng cho tất cả các thư mục cần thiết trong PYTHONPATH của bạn.
Cam Jackson

Tôi biết điều này đã được trả lời, nhưng tôi đã nhận được nhập chưa được giải quyết cho grpmô-đun. Tôi vừa thêm nó vào builtinsdanh sách trong Preferences> PyDev> Interpreter> Python> Forced Builtins và vẫn nhận được tự động hoàn thành cho mô-đun đó
user1040495

Câu trả lời:


132

Trong các thuộc tính cho dự án pydev của bạn, có một ngăn được gọi là "PyDev - PYTHONPATH", với một ngăn phụ được gọi là "Thư viện bên ngoài". Bạn có thể thêm thư mục nguồn (bất kỳ thư mục nào có __init__.py) vào đường dẫn bằng cách sử dụng ngăn đó. Mã dự án của bạn sau đó sẽ có thể nhập các mô-đun từ các thư mục nguồn đó.


4
Nếu bạn thiết lập các thuộc tính PyDev một cách chính xác, bạn không cần phải gây rối vớisys.path
velociraptors

6
Đối với những người tìm kiếm khác, tôi muốn thêm kinh nghiệm của mình -Windows 7, Python 2.7.1, Eclipse 3.6.2, PyDev, Pyschopg (Đối với Python 2.7 amd64). Quá trình cài đặt Psychopg được chuyển đến C: \ Python27 \ Lib \ site-pack \ psycopg2 (trong bản cài đặt Python 2.7). Lần đầu tiên tôi tham chiếu đến thư mục đó và tất cả các thư mục con bằng init .py, nhưng thấy rằng tôi cũng phải tham chiếu đến thư mục site_packages. ( stackoverflow.com/questions/2983088/unresolved-import-models ) ( stackoverflow.com/questions/4631377/… )
Jeff Maass

86
Một điểm khác cần lưu ý - Eclipse có thể cần được khởi động lại để điều này hoạt động. Điều này dường như chỉ hoạt động qua "Tệp -> Khởi động lại" chứ không phải bằng cách đóng và mở lại theo cách thủ công.
soulBit

18
Lưu ý quan trọng: Tôi đã phát hiện ra rằng người phiên dịch Auto Config cho biết thêm C:\Python27\lib\site-packages, nhưng trên máy tính của tôi, thư mục lib là vốn: C:\Python27\Lib\site-packages. Thay thế mục nhập chữ thường bằng một mục nhập viết hoa, sau đó Tệp-> Khởi động lại đã khắc phục sự cố cho tôi. Hy vọng rằng sẽ giúp người khác ngoài kia :)
Cam Jackson

10
@soulBit Tôi ước tôi có thể không thích nhận xét đó 20 lần, tôi đã dành một giờ vui vẻ để tìm hiểu lý do tại sao quá trình nhập của tôi vẫn chưa được giải quyết. Cảm ơn bạn
Matt Dodge

51

Tôi đang sử dụng eclipse kepler 4.3, PyDev 3.9.2 và trên ubuntu 14.04 của tôi, tôi gặp phải vấn đề tương tự. Tôi đã thử và dành hàng giờ, với tất cả các tùy chọn ở trên nhưng đều vô ích. Sau đó, tôi đã thử những điều sau đây thật tuyệt vời:

  • Chọn Dự án -> Nhấp chuột phải-> PyDev -> Xóa cấu hình dự án PyDev
  • tệp-> khởi động lại

Và tôi đã sử dụng Python 2.7 làm trình thông dịch, mặc dù nó không hiệu quả, tôi nghĩ vậy.


5
Không cần khởi động lại Eclipse, chỉ cần đóng và mở lại tệp. Nó cũng hoạt động trên Windows với Eclipse Luna, Cảm ơn!
Noam Manos

Tôi đã phải khởi động lại Eclipse hai lần để làm cho các cảnh báo biến mất. Cảm ơn bạn
Vladimir S.

Hoạt động với Python 3.7. Đây sẽ là giải pháp cho câu hỏi này.
SPRBRN

Tôi đã thử điều này và bây giờ tôi không thể khởi động máy chủ DEV của mình. Làm cách nào để thay thế tệp?
Lee Loftiss

@ BitByty-Bake nguyên nhân gốc rễ là gì?
ankostis

42

Tôi vừa nâng cấp một dự án WXWindows lên Python 2.7 và không gặp khó khăn gì khi khiến Pydev nhận ra trình thông dịch mới. Thực hiện tương tự như trên khi cấu hình trình thông dịch, thực hiện cài đặt mới Eclipse và Pydev. Nghĩ rằng một số phần của python phải bị hỏng, vì vậy tôi đã cài đặt lại mọi thứ một lần nữa. Arghh! Đã đóng và mở lại dự án, đồng thời khởi động lại Eclipse giữa tất cả các thay đổi này.

CUỐI CÙNG nhận thấy rằng bạn có thể 'xóa cấu hình dự án PyDev' bằng cách nhấp chuột phải vào dự án. Sau đó, nó có thể được thực hiện thành dự án PyDev một lần nữa, bây giờ nó tốt như vàng!


Vâng, đóng cửa và mở cửa trở lại dự án để thoát khỏi những thông điệp ImportError làm phiền
somnathchakrabarti

17

Tôi đã sửa đường dẫn python của mình và mọi thứ đều trở nên tồi tệ khi tôi nhập nội dung thông qua bảng điều khiển, nhưng tất cả các lần nhập chưa được giải quyết trước đây này vẫn bị đánh dấu là lỗi trong mã của tôi, bất kể tôi đã khởi động lại nhật thực hoặc làm mới / làm sạch dự án bao nhiêu lần.

Tôi nhấp chuột phải vào dự án-> Pydev-> Xóa các điểm đánh dấu lỗi và nó đã giải quyết được vấn đề đó. Đừng lo lắng, nếu mã của bạn có lỗi thực tế, chúng sẽ được đánh dấu lại.


Điều này hoạt động tốt khi sử dụng liclipse với odoo 10. Cảm ơn!
Didierh

11

dự án -> thuộc tính -> pydev-pythonpath -> thư viện bên ngoài -> thêm thư mục nguồn, thêm thư mục PHỤ HUYNH của dự án. Sau đó khởi động lại nhật thực.


2
Chà, đây là cái đã khắc phục sự cố của tôi.
Simon Hayward

Không cần khởi động lại chỉ cần đóng và mở lại tệp. Đã sửa nó cho tôi!
Jerther

4

Đây là những gì đã làm việc cho tôi (theo soulBit):

1) Restart using restart from the file menu
2) Once it started again, manually close and open it.

Đây là giải pháp đơn giản nhất từ ​​trước đến nay và nó loại bỏ hoàn toàn điều khó chịu.


1

Có hai cách để giải quyết vấn đề này:

  • Xóa trình thông dịch Python khỏi "Trình thông dịch Python" và thêm lại.
  • Hoặc chỉ cần thêm thư mục có các thư viện trong trình thông dịch mà bạn đang sử dụng trong dự án của mình, trong trường hợp của tôi, tôi đang sử dụng "chai" và thư mục tôi đã thêm là "c: \ Python33 \ Lib \ site-pack \ chai-0.11.6 -py3.3.egg "

Bây giờ tôi không thấy lỗi nữa, và tính năng hoàn thành mã hoạt động tốt với "chai".


1

Tôi đang chạy Eclipse 4.2.0 (Juno) và PyDev 2.8.1 và gặp sự cố này với một lib được cài đặt vào đường dẫn gói trang của tôi. Theo câu hỏi SO này:

Tệp Pydev và * .pyc

... có vấn đề với tệp PyDev và pyc. Trong trường hợp của lib cụ thể mà tôi đã cố gắng tham chiếu, tất cả những gì được phân phối là tệp pyc.

Đây là những gì tôi đã làm để giải quyết vấn đề này:

  1. Cài đặt uncompyle2 từ https://github.com/Mysterie/uncompyle2
  2. Chạy uncompyle2 đối với các tệp * .pyc trong lib gói trang. Thí dụ:

    uncompyle2 -r -o / tmp / path / to / site-pack / lib

  3. Đổi tên các tệp * .pyc_dis kết quả được tạo từ uncompyle2 thành * .py
  4. Di chuyển / sao chép các tệp * .py này vào đường dẫn gói trang
  5. Trong Eclipse, chọn Tệp> Khởi động lại

Lỗi nhập chưa được giải quyết liên quan đến tệp .pyc hiện sẽ biến mất.


0

Sau đây, theo tôi sẽ giải quyết được vấn đề

  1. Thêm .py init vào thư mục "~ / Desktop / Python_Tutorials / lặnintopython / py" của bạn
  2. Đi tới Window -> Preferences -> PyDev -> Interpreter -> Python Interpreter để xóa cài đặt Trình thông dịch Python của bạn (lý do là vì PyDev không thể tự động làm mới bất kỳ cập nhật nào được thực hiện cho bất kỳ Hệ thống PythonPath nào)
  3. Thêm Trình thông dịch với các chi tiết tương tự như trước (điều này sẽ làm mới cài đặt Trình thông dịch Python của bạn với các bản cập nhật được thực hiện cho PythonPath của bạn)
  4. Cuối cùng vì thư mục "~ / Desktop / Python_Tutorials / lặnintopython / py" của bạn không phải là một PythonPath tiêu chuẩn, bạn sẽ cần thêm nó vào. Có hai cách để thực hiện

a. Theo như những gì David German đề nghị. Tuy nhiên, điều này chỉ áp dụng cho các dự án cụ thể mà bạn đang ở trong b. Thêm "~ / Desktop / Python_Tutorials / lặnintopython / py" vào một PythonPath mới trong Window -> Preferences -> PyDev -> Interpreter -> Python Interpreter -> Libraries subab -> NewFolder

Hy vọng nó giúp.


0

Tôi gặp một số sự cố khi nhập thư viện bổ sung, sau khi cố gắng giải quyết sự cố, bằng cách hiểu PYTHONPATH, Trình thông dịch và Ngữ pháp, tôi thấy rằng tôi đã viết mọi thứ nhưng sự cố vẫn tiếp diễn. Sau đó, tôi chỉ cần thêm một dòng trống mới trong các tệp có lỗi nhập và lưu chúng và lỗi đã được giải quyết .


-1
KD.py

class A:
a=10;

KD2.py 
from com.jbk.KD import A;
class B:
  b=120;

aa=A();
print(aa.a)

Tệp này hoạt động hoàn hảo cho tôi

Một ví dụ khác là

main.py
=======
from com.jbk.scenarios.objectcreation.settings import _init
from com.jbk.scenarios.objectcreation.subfile import stuff

_init();
stuff();

settings.py
==========
def _init():
print("kiran")


subfile.py
==========
def stuff():
print("asasas")    

Vui lòng xem xét để tách tên tệp và mã. Và bạn cũng cần sửa một số thụt lề.
dkato
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.