Modul SSL dengan Python tidak tersedia (di OSX)

21

Saya mengalami masalah pip installdalam menjalankan virtualenv di OSX 10.13. Saya sudah menjalankan brew install openssldan jalur /usr/local/include/opensslmenunjuk ke ../opt/openssl/include/openssl. Adakah yang tahu bagaimana cara memperbaikinya? Ini mulai terjadi setelah saya menginstal ulang pythonmenggunakan brew install.

pip dikonfigurasikan dengan lokasi yang memerlukan TLS / SSL, namun modul ssl dengan Python tidak tersedia. Mengumpulkan Bantal Tidak dapat mengambil URL https://pypi.python.org/simple/pillow/ : Ada masalah saat mengonfirmasi sertifikat ssl: Tidak dapat terhubung ke URL HTTPS karena modul SSL tidak tersedia. - Melewati Tidak dapat menemukan versi yang memenuhi persyaratan Bantal (dari versi:) Tidak ditemukan distribusi yang cocok untuk Bantal

PEMBARUAN: Berikut beberapa info lebih lanjut:

 which python
/usr/local/opt/python/libexec/bin/python
 which pip
/usr/local/opt/python/libexec/bin/pip
 python --version
Python 3.7.4
 pip --version
pip 19.1.1 from /usr/local/lib/python3.7/site-packages/pip (python 3.7)
 brew info python
python: stable 3.7.4 (bottled), HEAD
Interpreted, interactive, object-oriented programming language
https://www.python.org/
/usr/local/Cellar/python/3.6.5_1 (4,795 files, 100.0MB)
  Poured from bottle on 2019-10-08 at 14:39:37
/usr/local/Cellar/python/3.7.4_1 (3,903 files, 60.6MB) *
  Poured from bottle on 2019-10-08 at 14:37:10
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/python.rb

Ya, saya sudah menginstal 3.6.5_1 dan 3.7.4_1 karena saya mungkin perlu beralih di antara keduanya sekaligus.

 brew unlink openssl
Unlinking /usr/local/Cellar/openssl/1.0.2s... 0 symlinks removed
John M.
sumber
Mulailah dengan menunjukkan output dari which python, which pip, python --version, pip --version. Kemudian, terakhir kali saya memeriksa, opensslhanya tong, jadi /usr/local/include/opensslseharusnya tidak ada, lari brew unlink openssl.
ivan_pozdeev
@ivan_pozdeev Tentu, saya telah menambahkan hasilnya. Saya sudah mencoba brew unlink.
John M.

Jawaban:

54

The sslmodul serta mendasari muncul C ekstensi untuk menjadi bagian dari pythonrumus:

Mac-Admin:~ admin$ python3
Python 3.7.4 (default, Sep  7 2019, 18:27:02) 
[Clang 10.0.1 (clang-1001.0.46.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl
<module 'ssl' from '/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py'>
>>> import _ssl
>>> _ssl
<module '_ssl' from '/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload/_ssl.cpython-37m-darwin.so'>

jadi itu hilang kemungkinan besar berarti paket instalasi korupsi yang brew reinstall pythonharus diperbaiki.


Perhatikan juga bahwa walaupun Homebrew memungkinkan beberapa versi untuk hidup berdampingan, logika instansasinya tidak cukup dirancang untuk menjaga versi alternatif tetap beroperasi kecuali mereka diinstal melalui formula berversi (dan misalnya secara rutin menghapus versi lama dalam versi biasa brew cleanup).

Jadi pertimbangkan untuk menggunakan pyenv(juga tersedia melalui brew) jika Anda perlu secara rutin beralih di antara versi Python - atau ketuk pihak ketiga yang menawarkan formula berversi untuk itu.

ivan_pozdeev
sumber
8
Terima kasih! brew reinstallmemang memperbaikinya.
John M.
11

Mac OSX Catalina (dan masalah yang sama pada OSX Mojave) Pyenv

Bagi siapa pun yang mencari topik ini, saya memiliki masalah penyajian yang sama, tetapi memasang Python melalui Homebrew dan Pyenv !! Akan lebih baik (IMO) menggunakan Pyenv untuk mengelola versi dengan mudah. Seperti disebutkan oleh @ivan_pozdeev dalam jawaban mereka, tapi inilah beberapa detail yang mungkin Anda inginkan.

Jika situasi Anda serupa, tidak ada solusi di atas yang cukup untuk memperbaiki keadaan. Sebagian saya dibantu oleh jawaban terkait Pyenv di sini: https://stackoverflow.com/a/51797298/3084820 Saya juga telah pyenv-virtualenvmenginstal, sehingga menyebutkan itu juga, karena sudah umum untuk menggunakan keduanya bersama-sama.

Saya akhirnya mengambil langkah-langkah berikut untuk menyelesaikan masalah:

brew uninstall python
rm -rf $(pyenv root)
brew uninstall pyenv-virtualenv   # you may not have this installed, but...
brew uninstall pyenv

Sekarang, untuk instalasi bersih yang dapat dikelola dengan Pyenv:

brew install pyenv
pyenv install 3.6.10  (or whatever version you want)

Ini memberi saya instalasi Python 3.6.10 yang bersih dan berfungsi, dan jika saya ingin atau perlu melakukannya, saya dapat menginstal versi yang berbeda dan beralih antara dengan Pyenv.

Matt Morgan
sumber
Saya pikir saya berada dalam situasi yang sama. Sekarang, perlukah brew uninstall pythonjika Anda hanya menggunakan pyenv? Atau apakah ini menciptakan konflik di suatu tempat? Juga, saya mencoba brew uninstall pythondan melemparkan saya pesan kesalahan "Kesalahan: Menolak untuk menghapus /usr/local/Cellar/python/3.7.7 karena diperlukan oleh [banyak paket lain]". Mungkin aman untuk melanjutkan saran itu brew uninstall --ignore-dependencies python, tetapi saya ragu-ragu. Saya tidak ingat bagaimana saya menggunakan versi python ini, dan jika entah bagaimana saya masih menggunakannya.
Antoine
@Antoine, saya yakin saya bisa memperbaikinya dalam pyenv tanpa menginstal ulang python dengan minuman. Namun saya menginstal ulang versi python tertentu dengan pyenv: pyenv uninstall 3.6.6 pyenv install 3.6.6 pyenv global 3.6.6
wronk
@ronk, terima kasih atas masukan Anda! Tampaknya (tapi saya tidak sepenuhnya yakin) bahwa masalah yang entah bagaimana saya menghilang dengan menjalankan brew uninstall python meskipun itu melemparkan kesalahan bahwa itu tidak akan uninstall python. Mungkin perintah itu melakukan pembersihan awal, sebelum memutuskan bahwa itu tidak akan berjalan dengan menghapus instalan python? Atau mungkin ada hal lain yang saya lakukan. Bagaimanapun, saya masih memiliki masalah yang berbeda dengan versi python lain, dan saya pikir saya akan menginstal ulang versi itu seperti yang Anda sarankan.
Antoine
2

Saya punya masalah yang sama dengan Catalina dan tidak bisa menginstal ulang homebrew untuk bekerja. Saya mencoba beberapa hal.

brew reinstall openssl
brew reinstall pyenv
brew reinstall pyenv-virtualenv

Pada akhirnya satu-satunya hal yang berhasil bagi saya adalah menghapus sepenuhnya baik instalasi python yang mendasarinya dan kemudian menginstal ulang semuanya.

brew uninstall pyenv pyenv-virtualenv
brew install pyenv pyenv-virtualenv
pyenv uninstall 3.x.x
pyenv install 3.x.x
pip install -r requirements.txt
charlton_austin
sumber
tidak brew uninstall pyenv pyenv-virtualenvtidak menghapus semua lingkungan virtual seperti yang disarankan oleh Anda pyenv uninstall 3.x.x?
Antoine
0

Saya memiliki masalah yang sama, tetapi instal ulang tidak berhasil untuk saya.

⇒ yang python3
/ usr / local / bin / python3 blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ blamb pip3 / usr / local / bin / pip3 @ cha-109164-l: / usr / local / bin | master⚡

⇒ pip3 -V pip 19.3.1 dari /usr/local/lib/python3.7/site-packages/pip (python 3.7) blamb @ cha-109164-l: / usr / local / bin | master⚡

⇒ python3 -V Python 3.7.0 blamb @ cha-109164-l: / usr / l

Bennie Lamb
sumber
2
Selamat datang di stack overflow! Anda mungkin ingin mengedit jawaban Anda untuk memformat kode Anda. Misalnya, 4 spasi sebelum baris kode Anda akan menandainya sebagai kode. Anda mungkin ingin membaca bantuan formating untuk lebih memahami bagaimana cara meringkas pertanyaan dan jawaban Anda. Anda akan memiliki kesempatan yang lebih baik dengan mereka jika mereka diformat dengan baik.
rvbarreto
0

Saya memiliki kesalahan yang sama dan itu karena saya menggunakan python 3.6.5 di lingkungan pyenv saya. Perawatan di bawah ini berhasil untuk saya.

pyenv install 3.7.3
pyenv global 3.7.3
Yasunari Nishi
sumber
0

Saya juga memiliki kesalahan ini dan saya memperbaikinya brew update && brew upgrade

baskcat
sumber
0

Perbaikan saya adalah menginstal ulang pyenv dan python

 brew uninstall pyenv pyenv-virtualenv
 brew install pyenv pyenv-virtualenv
 pyenv uninstall 3.6.5
 pyenv install 3.6.5
tzatalin
sumber