2012-12-27 30 views
14

Tôi đang sử dụng PyDev cho Eclipse làm IDE và pip làm công cụ quản lý gói của tôi, chạy virtualenv.PyDev cho Eclipse - Giải quyết các phụ thuộc Python (nhập khẩu chưa được giải quyết)

Mỗi khi tôi muốn sử dụng/bao gồm một số thư viện mới hoặc phụ thuộc mới trong dự án của mình, tôi thêm chúng vào đường dẫn yêu cầu tệp. Các phụ thuộc được cài đặt trong môi trường ảo của tôi mà không có vấn đề gì sau khi chạy pip install -r pip-requires.

Env My:

  • Ubuntu 12.04
  • PyDev cho Eclipse 2.7.1.2012100913
  • Python 2.7.3
  • Eclipse chàm

Cập nhật: tôi cài đặt Pydev:

enter image description here

Câu hỏi:

  • eclipse/PyDev không biết gì về các thư viện mới được thêm vào trong env ảo của tôi. Tôi đã phải tự thêm thư mục nguồn .egg vào PYTHONPATH của dự án eclipse từng cái một để giải quyết tất cả các nhập khẩu chưa được giải quyết mà rất khó chịu! Các phụ thuộc python có thể được giải quyết một cách dễ dàng hơn không?

Cập nhật:

  • Tôi thấy rằng nếu tôi sử dụng env ảo Env/bin/python như người phiên dịch như ảnh chụp màn hình cho thấy, một số các module cơ bản không được giải quyết trong nhật thực, ví dụ. import copy, import json v.v. tôi có nên sử dụng mặc định /usr/bin/python làm thông dịch viên và chỉ thêm virtual env site-package vào PYTHONPATH không? để tôi có thể giải quyết cả hai thư viện python chuẩn (ví dụ: json) và các phụ thuộc dự án của riêng tôi?
+0

Cập nhật câu trả lời của tôi. Xin vui lòng xem qua. – jinghli

+0

Cảm ơn rất nhiều Jinghli, nó hoạt động ngay bây giờ. – Shengjie

Trả lời

13

Đảm bảo hệ thống PYTHONPATH của bạn bao gồm thư mục site-package khi bạn chọn trình thông dịch python từ virtualenv của bạn. Cũng giống như ảnh chụp nhanh. enter image description here

Sau đó, bạn không cần phải thêm từng cái một vào PYTHONPATH. Bạn sẽ cần phải khởi động lại nhật thực (Làm mới không hoạt động). Các mô hình mới sẽ được thêm vào.

Cập nhật: Tôi đã kiểm tra PYTHONPATH trong virtualenv. Tôi tìm thấy có một số đường dẫn khác trong sys.path. Chúng là vị trí cài đặt mặc định của hệ thống python. Những đường dẫn này bao gồm các mô hình cơ bản, như copyjson.

PS: Môi trường của tôi là Max OSX 10.8. Vui lòng kiểm tra kết quả của nền tảng của riêng bạn bằng cách print sys.path

/Users/username/.virtualenvs/test/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg 
/Users/username/.virtualenvs/test/lib/python2.7/site-packages/pip-1.1-py2.7.egg 
/Users/username/.virtualenvs/test/lib/python27.zip 
/Users/username/.virtualenvs/test/lib/python2.7 
/Users/username/.virtualenvs/test/lib/python2.7/plat-darwin 
/Users/username/.virtualenvs/test/lib/python2.7/plat-mac 
/Users/username/.virtualenvs/test/lib/python2.7/plat-mac/lib-scriptpackages 
/Users/username/.virtualenvs/test/lib/python2.7/lib-tk 
/Users/username/.virtualenvs/test/lib/python2.7/lib-old 
/Users/username/.virtualenvs/test/lib/python2.7/lib-dynload 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac 
/usr/local/Cellar/python/2.7.3/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages 
/Users/username/.virtualenvs/test/lib/python2.7/site-packages 

Tôi nghĩ đây là yêu cầu của virtualenv. Bạn cần thêm các đường dẫn này vào hệ thống pydev PYTHONPATH. Sau đó, bạn có thể sử dụng các mô-đun cơ bản này.

+0

khi tôi sử dụng env virutal làm thông dịch viên, nó có vẻ như thiếu một số lib python cơ bản, ví dụ như. sao chép, json không được giải quyết nữa. Nhưng tôi đã nhận được cách với nó bằng cách sử dụng thông dịch viên mặc định: /usr/bin/python2.7, và thêm các trang web ảo env-gói của tôi trong PYTHONPATH như bạn ảnh chụp màn hình. – Shengjie

+0

Bạn có thể chia sẻ với chúng tôi về cài đặt của bạn qua ảnh chụp màn hình không? Nếu cài đặt của bạn là của tôi, tôi tin rằng nó sẽ làm việc, nó là werid. – jinghli

+0

Tôi không nghĩ rằng bạn phải làm virtualenv ... anh ta chỉ trong ví dụ này –

12

Từ các câu hỏi của bạn, tôi hiểu rằng bạn đang thêm thủ công gói Python Egg vào đường dẫn. Thay vì làm điều này, bạn có thể vào cửa sổ Cài đặt dự án, sau đó mở "PyDev - PYTHONPATH", điều hướng đến bảng điều khiển có tên "Thư viện bên ngoài" và thêm toàn bộ thư mụcsite-packages của môi trường ảo của bạn, thường là /path/to/virtualenv/lib/site-packages/. Bằng cách này bạn sẽ không thêm trứng từng cái một cho mỗi gói. Khi bạn cài đặt một gói mới, chỉ cần vào cửa sổ Eclipse và nếu quá trình nhập vẫn chưa được giải quyết, hãy chọn dự án và nhấn phím F5, để làm mới dự án.

Hy vọng rằng điều đó sẽ phù hợp với bạn. Chúc may mắn.

+0

Có đó là những gì cần thiết. Đã có vấn đề tương tự với PIL và pip –

+0

vì vậy làm thế nào nó đã không làm việc cho tôi vẫn còn, tôi đã phải thêm /home/myname/virt-env/lib/python2.7/site-packages/happybase-0.4-py2.7. trứng trong Thư viện bên ngoài để có thể giải quyết nó. Chỉ cần /home/myname/virt-env/lib/python2.7/site-packages không hoạt động đối với tôi. Tôi có thiếu gì ở đây không? – Shengjie

+0

Bạn đã thử làm mới dự án bằng cách sử dụng 'F5' chưa? –

3

Đây là cách tôi đi về việc thiết lập PyDev với một virtualenv:

  1. Tạo một virtualenv tại /home/anshumanb/.virtualenvs/myvenv
  2. Trong Eclipse, Window> Preferences> PyDev> Interpreter - Python, tôi thêm một thông dịch viên mới. Đối với người phiên dịch thực thi, tôi trỏ nó đến Python của virtualenv tức /home/anshumanb/.virtualenvs/myenv/bin/python
  3. Trong mục "Chọn thư mục để được thêm vào PYTHONPATH" màn hình, tôi chọn tất cả các đường dẫn bắt đầu với /home/anshumanb/.virtualenvs/myvenv
    /usr/lib/python2.7
    /usr/lib/python2.7/plat-linux2
    /usr/lib/python2.7/lib-tk và không có gì khác.
    (Xem this cho lý do tại sao tôi chọn /usr/lib/python2.7, /usr/lib/python2.7/plat-linux2/usr/lib/python2.7/lib-tk)
  4. Khi tôi trở lại tại Interpreter - màn hình Python trong tùy chọn Eclipse, tôi nhấn Apply rồi OK

Sau này, bất cứ khi nào tôi cài đặt bất kỳ gói nào vào virtualenv, tôi quay trở lại màn hình Interpreter - Python, nhấn Apply, chọn trình thông dịch trỏ tới virtualenv của tôi (và cái tôi vừa cài đặt gói vào) và nhấn Apply. PyDev sau đó chọn bất kỳ gói mới nào được cài đặt trong virtualenv.

Lưu ý: Tôi đang sử dụng PyDev 2.7.1 và Python 2.7.3 nhưng trên hộp Arch Linux với Eclipse 4.2.1. Nhưng tôi không nghĩ nó sẽ tạo nên sự khác biệt.