Apakah "python3" dan "python" menggunakan variabel path yang berbeda?


9

Perintah pythonmembuka lingkungan Python 2.7.6. Jika saya ingin menafsirkan skrip Python 3, saya perlu menulis ulang perintah python3.

Saya baru saja menginstal paket numpy . Untuk menguji instalasi yang berhasil, saya menjalankan perintah import numpy. Ini bekerja dengan baik saat menggunakan pythonperintah. Namun, python3tidak menemukan paket.

Bagaimana ini mungkin? Apakah kedua perintah ini menggunakan variabel jalur yang berbeda ? Bagaimana saya bisa mengubah perilaku?


Jawaban:


9

Anda memang benar, mereka menggunakan PYTHONPATHs yang berbeda .

Anda dapat menganggap Python 2.x dan Python 3.x sebagai lingkungan pemrograman yang sama sekali berbeda. Dan ya, mereka menyimpan paket mereka di lokasi yang berbeda.

Agar numpy berfungsi, Anda dapat mengetik:

sudo apt-get install python3-numpy

Jika Anda ingin mencari tahu di mana tepatnya suatu paket disimpan, Anda bisa melihat __path__atribut objek modul :

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

Anda juga dapat menginstal python3-pipdan menjalankan pip3 install whateveruntuk menginstal paket untuk Python 3 dengan Pip , untuk paket yang tidak tersedia di Ubuntu python3-whatever.

Jika Anda bingung tentang perbedaan antara distutils, setuptools, easy_install, pip dan lainnya, gunakan pip. Itu yang keren. :)


2
Mereka tidak menggunakan PYTHONPATH yang berbeda, tetapi python2 hanya menggunakan paket-paket di $ PREFIX / lib / python2 * dan python3 hanya pada $ PREFIX / lib / python3 *.
dalloliogm

4

Tidak, mereka menggunakan hal yang sama PATH. Namun, ini masalah tidak dengan PATH.

Python 2 dan Python 3 cukup berbeda sehingga paket harus ditulis secara terpisah untuk keduanya. Anda tidak dapat menggunakan paket yang ditulis untuk satu dengan yang lainnya.

Di Ubuntu, modul ini disimpan di lokasi yang berbeda dan dikemas secara terpisah - python-numpyuntuk Python 2, python3-numpyuntuk Python 3. Jika Anda ingin numpy dengan Python 3, instal 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

Memang, keduanya mengimpor modul dari lokasi yang berbeda:

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

Agar dapat mengimpor numpydengan kedua juru bahasa, pastikan untuk menginstal paket yang sesuai:

  • Python2.7: sudo apt-get install python-numpy
  • Python3.x: sudo apt-get install python3-numpy
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.