Jawaban:
Cara mengetahui apakah modul python diinstal atau tidak dalam sistem: Anda dapat melakukan tes yang sangat mudah di terminal,
$ python -c "import math"
$ echo $?
0 # math module exists in system
$ python -c "import numpy"
Traceback (most recent call last):
File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1 # numpy module does not exist in system
Anda dapat menginstal modul tertentu dengan mengunduh paket masing-masing dari repositori, misalnya Anda dapat menginstalscipy sebagai,
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
Bergantian Anda juga dapat menginstal modul python menggunakan python-pipseperti yang disarankan oleh Zack Titan di komentar di bawah ini , Untuk menginstal numpyAnda dapat menggunakan
pip install numpy
Peringatan: Sangat disarankan untuk menginstal modul python hanya menggunakan repositori resmi Ubuntu dan tidak menggunakan pipmetode sebagai superuser (yaitu, sebagai rootatau menggunakan sudo). Dalam beberapa kasus, ini dapat membuat sistem Anda tidak dapat digunakan dengan memecah sistem python.
Cara menginstal paket menggunakan pipke lingkungan virtual lokal.
vpythonAnda harus menginstalnya sebagaisudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
sudo pip; itu dapat merusak sistem python. Gunakan apt-get untuk menginstal paket untuk sistem python. Anda bisa menggunakan pip --useropsi atau virtualenv untuk menginstal paket Python untuk Anda sendiri.
Jika kita tidak ingin mengimpor modul yang tidak diinginkan (yang akan terjadi dalam trypernyataan), kita dapat menggunakan sys.modulesuntuk menguji modul yang diinstal dan diimpor sebelumnya.
Dalam masalah shell python:
>>> import sys
Kemudian uji untuk modul yang diinstal:
>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False
Perhatikan bahwa hanya modul-modul yang diimpor sebelum memberikan Truepengujian ini, semua modul lain (bahkan jika diinstal) menghasilkanFalse.
Alternatif lain untuk trysebuah importpernyataan di konsol python memanggil inbuilt help()fungsi. Ini tidak akan memberikan dokumentasi untuk modul yang tidak diinstal, misalnya
>>> help('scipy')
no Python documentation found for 'scipy'
Output dokumen bantuan yang sangat panjang dari modul yang diinstal dapat terganggu Q.
Sekarang untuk menginstal modul yang hilang, disarankan untuk menggunakan manajemen paket Ubuntu (dan bukan cara pip Python) karena kita memerlukan akses root dan juga untuk mencegah mengacaukan sistem Python-dependend kita. Untuk modul yang dimaksud misalnya adalah:
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
Setelah instalasi kita kemudian dapat menambahkannya ke sys.moduleskamus dengan mengimpornya sekali.
sys.moduleshanya berisi modul yang sudah diimpor , jadi ini bukan cara yang dapat diandalkan untuk menguji apakah suatu modul telah diinstal. Tes yang paling dapat diandalkan adalah dengan menggunakan a try/exceptdan menjebaknya ImportError, seperti yang telah disarankan beberapa orang lainnya.
sys.modulessama sekali tidak relevan dan saya pikir penyebutan itu menyesatkan. Tapi mungkin itu hanya aku.
sys.modulestidak ada bantuan di sini.
Cara lain adalah pkgutilmodul. Bekerja dengan Python 2 & 3:
python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'
Anda perlu mengganti moduledengan nama modul Anda, contoh:
$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1
print()juga akan berfungsi dengan baik di Python 2; Itu diperlakukan sebagai sintaks grup-dengan-parens, dan tidak memiliki efek samping. Hanya ketika Anda ingin menambahkan beberapa item (seperti di print('a', 'b')dalamnya akan diperlakukan sebagai tuple, di mana Anda memang membutuhkannya from __future__ import print_function, tetapi itu tidak berlaku dalam kasus ini, Anda hanya dapat menulis kode yang kompatibel dengan maju dengan menambahkan parens (saya menguji perubahan saya dalam Python 2 dan 3)
Saya tahu OP awalnya meminta solusi setelah memulai Python, tetapi di luar python saya gunakan pip. Di ubuntu:, sudo apt-get install python-pipjika belum diinstal.
Kemudian untuk melihat modul pihak ketiga apa yang tersedia, jalankan saja:
pip freeze
Atau bahkan
pip list
Dan keduanya akan menunjukkan kepada Anda semua modul yang terpasang dan versinya.
Jika modul yang Anda cari tidak diinstal, sebagian besar waktu Anda dapat dengan mudah menginstalnya dengan pip:
pip install <module-name>
Jika Anda tidak yakin apakah modul itu ada atau apa namanya PyPI, gunakan pip search:
pip search <keyword>
pip show <module-name>akan menunjukkan apakah suatu paket diinstal, mis pip show numpy.
Anda bisa memasukkan kode ke dalam try, exceptblokir.
$ python3 -c "\
try:
import cow
print('\nModule was installed')
except ImportError:
print('\nThere was no such module installed')"
There was no such module installed
$ python3 -c "\
try:
import regex
print('\nModule was installed')
except ImportError:
print('\nThere was no such module installed')"
Module was installed
Untuk memberikan jawaban lain, demi penyelesaian:
Anda dapat (ab) menggunakan -mopsi. Dari halaman Python:
-m module-name
Searches sys.path for the named module and runs the correspond‐
ing .py file as a script.
Yang akan memberi kita:
$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed
$ python2 -m math
/sbin/python2: No code object available for math
Tetapi untuk modul yang tidak ada, itu akan memberi kita:
$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist
Kita bisa menggunakan grepuntuk mencocokkan ini:
$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope
$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup
Ini sedikit hack-ish, dan bukan untuk apa -m; tetapi ini adalah metode yang paling tidak membutuhkan pengetikan jika Anda ingin tes cepat :-)
grep -qmembuat pengalihan ke nol tidak perlu.
/dev/null
Saya menulis contoh dengan Python:
import pip
import sys
from bigml.api import BigML
if not 'bigml' in sys.modules.keys():
pip.main(['install', 'bigml'])
Saya menemukan bahwa untuk membuat penyediaan infrastruktur saya ** idempoten, saya harus dapat memeriksa paket dari shell di oneliner. Saya membangun jawaban @ cuonglm. Saya harus membalikkan 1dan 0karena saya menghasilkan status keluar daripada mencetak string.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo
Anda dapat menggantinya sys.argv[1]dengan nama yang dikutip tunggal dari paket Anda, tetapi untuk skrip penyediaan saya, saya suka keterbacaan memilikinya pada akhirnya.
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"
** Saya menyadari bahwa koki , boneka , dan yang mungkin semua memiliki plugin untuk mengelola paket python, tetapi Anda mungkin menemukan diri Anda dalam situasi seperti saya di mana Anda menggunakan versi yang sudah ketinggalan zaman dan tidak ingin menggunakan plugin yang sudah usang.
Satu juga dapat menggunakan pydoc modules, yang dapat disaring dengan grepuntuk menemukan modul tertentu. Outputnya ditampilkan dalam format kolom. Satu-satunya kelemahan dari pendekatan ini adalah bahwa ia juga akan memasukkan file python dalam direktori kerja saat ini. Meskipun demikian, saya sering menggunakannya sendiri dan ini adalah salah satu pendekatan yang sangat dikutip pada pertanyaan terkait ini: https://stackoverflow.com/q/739993/3701431
Dari Shell Ubuntu, secara default bash, sesederhana
pip list | grep <package-name-Case-Matters>
Contohnya
pip list | grep pywinrm
pip list | grep numpy
Dan, jika Anda memiliki keraguan tentang kasus ini (meskipun saya pikir semua nama paket selalu huruf kecil):
pip list | grep [Nn]um[Pp]y # it works with numpy, Numpy, numPy, and NumPy
Saat menulis ini, pip show ...tampaknya menjadi cara termudah:
https://pip.pypa.io/en/stable/reference/pip_show/
Tetapi diam (mis. Mengembalikan apa-apa) ketika paket tidak diinstal.