Bagaimana cara memeriksa apakah modul atau paket sudah diinstal di python3?

10

Perlu memverifikasi apakah sudah diinstal atau tidak sebelum program dapat berjalan.

hubatrix
sumber
2
Jalankan saja pip install. Jika sudah diinstal, itu tidak akan menginstalnya lagi.
jordanm
Terima kasih jordanm, tetapi saya perlu memeriksa dan memberikan ao / p kemudian pengujian.
hubatrix

Jawaban:

3

Ketik di shell: pydoc modules.
Ini akan mendaftar modul dan Anda dapat memahami modul yang Anda inginkan.
Ditemukan di stackoverflow di sini

labirin
sumber
11

Anda harus menggunakan pip's listperintah dengan grep, bahwa hanya daftar diinstal paket (tidak semua modul dan tetangga mereka juga):

pip list | grep -F package_name

Jika package_name cocok dengan beberapa paket yang diinstal misalnya mencari botokapan botocorejuga diinstal, maka menggunakan -wbukannya -Fdapat membantu, seperti yang disarankan @TaraPrasadGurung. Ini tidak mencantumkan paket yang tepat, karena -wmelihat karakter umum dalam nama paket sebagai batas kata. Jadi jika Anda memiliki requestsdan requests-cachemenginstal atau ruamel.yamldan ruamel.yaml.cmd` dan membutuhkan satu baris output, Anda perlu melakukan sesuatu seperti:

pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "

Harap dicatat bahwa karena .cocok dengan karakter apa pun saat menggunakan -E, Anda harus menghindarinya.¹


¹ Dan ya itu perlu karena ada paket ruamel_yaml. Tidak setiap manajer paket pipkompatibel ketika berhadapan dengan paket namespace.

Anthon
sumber
Masalahnya adalah jika nama paket boto dan botocore terinstal, itu akan mencantumkan keduanya. Jadi solusi yang lebih baik adalah menggunakan flag -w daripada -F untuk membuat daftar paket yang tepat
Tara Prasad Gurung
@TaraPrasadGurung Meskipun itu dapat membantu mengurangi output, itu tidak membantu untuk mendapatkan paket yang tepat seperti yang Anda klaim. Misalnya titik dan tanda hubung diambil -wsebagai batas kata dan umum dalam nama paket. Saya mendapatkan beberapa pertandingan ketika saya menggunakan saran Anda menggunakan grep -w ruamel.yamlataugrep -w request
Anthon
pip list | grep -F mxnet-cu101mencetak mxnet-cu101 1.5.0, tetapi tidak persis di mana itu dipasang. tahu bagaimana cara mendapatkan jalur yang diinstal? `
Anu
@ any Ya, saya punya ide bagus tentang cara mengambil di mana paket Python diinstal mengingat saya tahu namanya. Anda harus memposting pertanyaan di situs ini dan ping saya di sini untuk perhatian saya ketika Anda melakukannya, karena saya tidak mengikuti pertanyaan yang baru diposting di U&L.
Anthon
4

Jika paket tidak melakukan sesuatu yang gila atau menghabiskan waktu dalam impor, Anda dapat mencoba mengimpornya:

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi
Dmiters
sumber
2

Saya telah menemukan jawaban yang ada tidak lengkap dan kurang contoh yang cukup baik. Inilah solusi yang telah saya pilih:

# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
    echo 'pandas found'
else
    echo 'pandas not found'
fi

Inti Github dari contoh ini dapat ditemukan di sini: https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6

ShayPal5
sumber
ini terlihat sangat mirip dengan jawaban yang ada
Jeff Schaller
1
Kode bash mirip, kode Python berbeda, yang membuat perbedaan. Saya telah membaca semua jawaban yang ada sebelum memilih untuk menambahkan jawaban saya, dan jawaban spesifik yang Anda tautkan tidak berfungsi untuk saya. Jadi, saya merasa relevan dan berharga untuk menambahkan jawaban saya di sini. :)
ShayPal5
1

Anda juga dapat menggunakan sesuatu seperti ini di skrip Anda.

python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"

Apa yang akan Anda dapatkan ketika paket tidak diinstal.

Package=psutil
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
1

Apa yang akan Anda dapatkan ketika paket diinstal.

Package=requests
python3 -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('$Package') else 1)"
echo $?
0

Bekerja di python2 dan python3, dan kemudian Anda menginstal berdasarkan kode keluar.

RJ
sumber
0

Saya menggunakan versi jawaban Anthon yang sedikit lebih ketat, untuk digunakan dalam skrip:

pip3 list |
    grep -v "^Package *Version$" | grep -v "^-*$" |
    cut -d ' ' -f 1 |
    grep -xF "$package_name"

Dua greps pertama dimaksudkan untuk menghilangkan garis header dari output pip3.

Pemotongan kemudian hanya memilih nama paket (membuang nomor versi).

Kemudian grep terakhir dapat melakukan pencarian tepat untuk yang relevan $package_name

Jika paket ditemukan, itu akan menampilkan nama paket, dan kembali dengan kode keluar 0. Jika Anda tidak ingin melihat nama paket, akhiri perintah dengan >/dev/null

joeytwiddle
sumber
0

dalam shell Python / prompt. :

>>> help('modules')
Metode Ilmiah
sumber
0

Diuji dengan pip3:

$> pip3 show MODULENAME

Kode keluar ($?) Akan menjadi "0" jika modul diinstal, atau "1".

Grepping memiliki masalah "false positive": Output dari a

pip list | grep NAME

akan cocok dengan modul apa pun yang namanya berisi "NAME", mis. juga cocok dengan "some_other_NAME".

Sementara

pip3 show MODULENAME

hanya kecocokan pada kecocokan lengkap.

Thomas Hofmann
sumber