Do trăn python3 và trăn trăn sử dụng các biến đường dẫn khác nhau?


9

Lệnh pythonmở một môi trường Python 2.7.6. Nếu tôi muốn diễn giải một kịch bản Python 3, tôi cần viết lại lệnh thành python3.

Tôi vừa cài đặt gói numpy . Để kiểm tra cài đặt thành công, tôi chạy lệnh import numpy. Nó hoạt động tốt khi sử dụng pythonlệnh. Tuy nhiên, python3không tìm thấy gói.

Sao có thể như thế được? Hai lệnh này có sử dụng các biến đường dẫn khác nhau không? Làm thế nào tôi có thể thay đổi hành vi?


có thể liên quan / hữu ích: stackoverflow.com/a/53767029/52074
Trevor Boyd Smith

Câu trả lời:


9

Bạn hoàn toàn đúng, họ sử dụng PYTHONPATHs khác nhau .

Bạn có thể nghĩ về Python 2.x và Python 3.x là các môi trường lập trình hoàn toàn khác nhau. Và vâng, họ lưu trữ các gói của họ ở các địa điểm khác nhau.

Để làm việc numpy, bạn có thể gõ:

sudo apt-get install python3-numpy

Nếu bạn muốn tìm ra nơi chính xác một gói được giữ, bạn có thể xem __path__thuộc tính đối tượng mô-đun :

>>> import numpy
>>> numpy.__path__
['/usr/local/lib/python3.5/site-packages/numpy']

Bạn cũng có thể cài đặt python3-pipvà sau đó chạy pip3 install whateverđể cài đặt các gói cho Python 3 với Pip , cho các gói không có sẵn trong Ubuntu như python3-whatever.

Trong trường hợp bạn bối rối về sự khác biệt giữa distutils, setuptools, easy_install, pip và phần còn lại, hãy sử dụng pip. Đó là một trong những tuyệt vời. :)


2
Họ không sử dụng PYTHONPATH khác nhau, nhưng thay vào đó python2 chỉ sử dụng các gói trong $ PREFIX / lib / python2 * và python3 chỉ những gói trong $ PREFIX / lib / python3 *.
dalloliogm

4

Không, họ sử dụng như nhau PATH. Tuy nhiên, đây vấn đề không phải là với PATH.

Python 2 và Python 3 đủ khác nhau mà các gói phải được viết riêng cho cả hai. Bạn không thể sử dụng một gói được viết cho cái này với cái kia.

Trong Ubuntu, các mô-đun này được lưu trữ ở các vị trí khác nhau và được đóng gói riêng - python-numpycho Python 2, python3-numpycho Python 3. Nếu bạn muốn gọn gàng với Python 3, hãy cài đặt python3-numpy.

$ python3 -c 'import sys; print (sys.path)'
['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/home/muru/.local/lib/python3.4/site-packages', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']
$ python2 -c 'import sys; print (sys.path)'
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client']

3

Thật vậy, cả hai đều nhập mô-đun từ các vị trí khác nhau:

  • Python2.7: /usr/lib/python2.7/dist-packages/numpy/
  • Python3.x: /usr/lib/python3/dist-packages/numpy/

Để có thể nhập numpybằng cả hai trình thông dịch, hãy đảm bảo cài đặt các gói tương ứng của họ:

  • Python2.7: sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy
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.