Чи використовують "python3" та "python" різні змінні шляху?


9

Команда pythonвідкриває середовище Python 2.7.6. Якщо я хочу інтерпретувати сценарій Python 3, мені потрібно переписати команду на python3.

Я щойно встановив пакет numpy . Для того щоб перевірити успішну установку, я запускаю команду import numpy. Він добре працює при використанні pythonкоманди. Однак python3пакет не знаходить.

Як це можливо? Чи використовують ці дві команди різні змінні шляху ? Як я можу змінити поведінку?


може бути пов’язано / корисно: stackoverflow.com/a/53767029/52074
Тревор Бойд Сміт

Відповіді:


9

Ви абсолютно праві, вони використовують різні PYTHONPATHs.

Ви можете вважати Python 2.x та Python 3.x як абсолютно різні програми програмування. І так, вони зберігають свої пакунки в різних місцях.

Щоб нумерові працювали, ви можете ввести:

sudo apt-get install python3-numpy

Якщо ви хочете дізнатися, де саме зберігається пакет, ви можете подивитися __path__атрибут об'єктів модуля :

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

Ви також можете встановити python3-pipта запустити pip3 install whateverдля встановлення пакетів для Python 3 з Pip для пакетів, які недоступні в Ubuntu як python3-whatever.

Якщо ви заплуталися в різниці між distutils, setuptools, easy_install, pip та іншими, скористайтеся pip. Це класно. :)


2
Вони не використовують різні PYTHONPATH, але, швидше, python2 використовує лише пакети в $ PREFIX / lib / python2 *, а python3 лише ті, які є в $ PREFIX / lib / python3 *.
dalloliogm

4

Ні, вони використовують те саме PATH. Однак ця проблема не пов'язана з PATH.

Python 2 і Python 3 настільки різняться, що пакунки потрібно писати окремо для обох. Ви не можете використовувати пакет, написаний для одного з іншим.

В Ubuntu ці модулі зберігаються в різних місцях і упаковуються окремо - python-numpyдля Python 2, python3-numpyдля Python 3. Якщо ви хочете нуміти з Python 3, встановіть 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

Дійсно, обидва імпортують модулі з різних локацій:

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

Щоб мати можливість імпортувати numpyз обома перекладачами, не забудьте встановити їх відповідні пакети:

  • Python2.7: sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.