Próbowałem zainstalować pycurl w virtualenv za pomocą pip i otrzymałem ten błąd
ImportError: pycurl: libcurl link-time ssl backend (openssl) is different from compile-time ssl backend (none/other)
Czytałem dokumentację mówiącą, że „Aby to naprawić, musisz powiedzieć setup.py, jaki backend SSL jest używany” (źródło), chociaż nie jestem pewien, jak to zrobić, ponieważ zainstalowałem pycurl za pomocą pip.
Jak mogę określić zaplecze SSL podczas instalowania pycurl za pomocą pip?
Dzięki
Odpowiedzi:
Po przeczytaniu ich pliku INSTALACYJNEGO udało mi się rozwiązać mój problem, ustawiając zmienną środowiskową i wykonując ponowną instalację
usuń istniejącą
pycurl
instalacjępip uninstall pycurl
eksportuj zmienną z zapleczem ssl czasu łącza (czyli openssl powyżej)
export PYCURL_SSL_LIBRARY=openssl
Następnie ponownie zainstalować
pycurl
z braku pamięci podręcznejpip install pycurl --no-cache-dir
Może być inne rozwiązanie, ale działa to idealnie dla mnie w przypadku instalacji
virtualenv
ipip
.źródło
PYCURL_SSL_LIBRARY=openssl
działa idealnie!set -x PYCURL_SSL_LIBRARY openssl
zamiast,export PYCURL_SSL_LIBRARY=openssl
jeśli używasz konsoli ryb zamiast bash .Odpowiedź helloworld2013 jest poprawna, ale klucz pasuje do biblioteki SSL, której oczekuje pycurl. Błąd będzie wyglądał mniej więcej tak:
pycurl: libcurl zaplecze ssl czasu łącza ( <library> ) różni się od zaplecza ssl czasu kompilacji ( <library> lub „ none / other ”)
Aby to naprawić, musisz użyć biblioteki, której oczekuje pycurl. W moim przypadku mój błąd to „ pycurl: libcurl zaplecze ssl czasu łącza ( nss ) różni się od zaplecza ssl czasu kompilacji (openssl) ”, więc moja poprawka była następująca:
źródło
PYCURL_SSL_LIBRARY
to, że jest całkowicie ignorowany. Dla mnie zaplecze ssl w czasie kompilacji jest zawsze „(brak / inne)”, mimo żeecho PYCURL_SSL_LIBRARY
dajeopenssl
.pycurl
i zainstalowałem z flagami:pip install --global-option="--with-openssl" --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" pycurl
pip install pycurl --compile --no-cache-dir
na CentOS 7.3.Z OSX 10.13, zainstalowanym openSSL i virtualenv, odniosłem sukces z:
źródło
brew reinstall openssl
W pip 7.1 możesz umieścić w swoim pliku wymagań:
pycurl==7.19.5.1 --global-option="--with-nss"
Po prostu zastąp nss odpowiednią biblioteką zaplecza ssl.
źródło
Sposób naprawienia pycurl po aktualizacji Mac OS High Sierra:
Zainstaluj ponownie biblioteki curl, aby używać OpenSSL zamiast SecureTransport
brew install curl --with-openssl
Zainstaluj pycurl z poprawnym środowiskiem i ścieżkami kompilacji
export PYCURL_SSL_LIBRARY=openssl pip uninstall pycurl pip install --no-cache-dir --global-option=build_ext --global-option="-L/usr/local/opt/openssl/lib" --global-option="-I/usr/local/opt/openssl/include" --user pycurl
źródło
--user
flagi jak wyżej, otrzymałem:Can not perform a '--user' install. User site-packages are not visible in this virtualenv.
To zadziałało dla mnie:
Nic z tego nie działało dla mnie (zauważ, że różnica jest po prostu easy_install vs pip):
pip uninstall pycurl export PYCURL_SSL_LIBRARY=[nss|openssl|ssl|gnutls] pip install pycurl #xor curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.19.3.1.tar.gz #... python setup.py --with-[nss|openssl|ssl|gnutls] install
źródło
easy_install
opcja była jedyną, która działała. Nie rozumiem, dlaczego jest to takie skomplikowane. Potrzebowałemexport PYCURL_SSL_LIBRARY=openssl
. Mój zgłosił „żaden / inny” dla skompilowanej biblioteki.Miałem ten problem od kilku dni. Wreszcie, z pomocą innych odpowiedzi tutaj (głównie Alexandra Tyapkova), uzyskałem to, pracując dla AWS Elastic Beanstalk.
Instalacja ręczna (połączenie z SSH):
sudo pip uninstall pycurl curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"
WAŻNE: Pamiętaj, że musisz się upewnić, że używasz aktualnej wersji Pythona i PIP, w przeciwnym razie możesz kompilować ją dla Pythona 2.x i używać v3.x.
Automatyczna instalacja w Elastic Beanstalk:
files: "/usr/local/share/pycurl-7.43.0.tar.gz" : mode: "000644" owner: root group: root source: https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz commands: 01_download_pip3: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'curl -O https://bootstrap.pypa.io/get-pip.py' 02_install_pip3: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'python3 get-pip.py' 03_pycurl_uninstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: '/usr/bin/yes | sudo pip uninstall pycurl' 04_pycurl_download: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz' 05_pycurl_reinstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL command: 'sudo pip install pycurl-7.43.0.tar.gz --global-option="--with-nss"' container_commands: 09_pycurl_reinstall: # run this before PIP installs requirements as it needs to be compiled with OpenSSL # the upgrade option is because it will run after PIP installs the requirements.txt file. # and it needs to be done with the virtual-env activated command: 'source /opt/python/run/venv/bin/activate && pip3 install /usr/local/share/pycurl-7.43.0.tar.gz --global-option="--with-nss" --upgrade'
Miałem ten problem, ponieważ próbowałem skonfigurować Celery 4 z Django 1.10 w Elastic Beanstalk. Jeśli tak jest, napisałem o tym cały wpis na blogu .
źródło
Jestem na CentOS 7. Wypróbowałem wszystkie powyższe i nic nie działało. Okazuje się, że musiałem je uruchomić jako użytkownik root. Jeśli więc masz problemy, wypróbuj dowolne z powyższych rozwiązań jako użytkownik root. Jako przykład, oto co zadziałało dla mnie:
Oczywiście obowiązują wszystkie typowe zastrzeżenia dotyczące uruchamiania jako użytkownik root.
Uwaga: [nss | openssl | ssl | gnutls] w powyższym kodzie oznacza, że należy wybrać jeden i nie należy umieszczać nawiasów kwadratowych ani rur. Osoba, która zadała oryginalne pytanie, wybrałaby plik openssl. W moim przypadku wybrałem nss. Twój komunikat o błędzie powinien wskazywać, jakiego wyboru dokonać.
Edycja 2019: Wykonanie a
sudo pip install
może spowodować problem z instalacją systemu Python na komputerze. Być może spróbuj pracować w środowisku wirtualnym Pythona i zainstaluj tam pakiety. Jeśli to nie zadziała, sztuczka sudo w mojej odpowiedzi jest prawdopodobnie jedną z ostatnich opcji do rozważenia.źródło
Możesz pobrać plik tar.gz stąd . Następnie wypakuj go do folderu. Znajdziesz tam plik setup.py. Uruchom tam polecenie, o którym wspomniała witryna. Na przykład:
python setup.py --with-[ssl|gnutls|nss] install
FYI: Próbowałem zainstalować pycurl w moich oknach, ale nie mogłem. Ale zrobiłem to na moim Linuksie.
źródło
Używam tego na OS X i niektóre z powyższych rozwiązań nie działały. Podobny do komentarza Edwarda Newella
PYCURL_SSL_LIBRARY
zmienna wydawał się być całkowicie ignorowane.Dalsze czytanie dokumentu instalacyjnego PycURL ujawniło następujące informacje:
Dlatego musiałem wymusić kompilację z:
pip install --compile pycurl
Działa to w wielu przypadkach. Jednak napotkałem kilka systemów, które nadal ignorowały tę zmienną, więc podobnie jak odpowiedź maharg101 uciekłem się do opcji instalacji, które przez pip można ustawić w następujący sposób:
pip install pycurl --global-option="--with-[ssl|gnutls|nss]"
gdzie wybierasz jedną z trzech opcji w nawiasach kwadratowych. Zwróć uwagę, że dostępna opcja to,
ssl
a nieopenssl
. Jeśli podasz--with-openssl
, pojawi się błąd. Zauważ również, że jeśli bawiłeś sięPYCURL_SSL_LIBRARY
zmienną i przełączałeś ją na funky wartości, aby zobaczyć, co się stanie, to ostatnie polecenie z pewnością ją złapie i wyrzuci błąd, jeśli wartość jest ustawiona, ale nie jest poprawna.źródło
pip install pycurl --global-option="--with-nss"
dla mnie. DlaImportError: pycurl: libcurl link-time ssl backend (nss) is different from compile-time ssl backend (openssl)
Ponowna instalacja curl
Wypróbowałem każdą sugestię z tej dyskusji, ale nikt dla mnie nie pracował. Jako rozwiązanie ponownie zainstalowałem curl i curlib. Potem mogłem zainstalować pycurl z obsługą SSL w środowisku.
Na starcie:
Część 1.Re/Instalacja za pomocą pip
Po pierwsze, usunąłem pycurl z virtualenv za pomocą pip, tak jak sugerowano poprzednie odpowiedzi:
pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl pip install pycurl --global-option="--with-openssl"
Pomysł jest taki, że pakiet został zbuforowany i po prostu ponownie zainstalujemy go z opcją openssl.
Próbowałem również przekompilować pycurl z pip przy użyciu:
..ale miał ten sam błąd po uruchomieniu:
python import pycurl pycurl.version
Część 2. Instalacja ze smoły
Po tym, jak poprzednia metoda nie zadziałała, zdecydowałem się zainstalować pycurl z tar z:
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz sudo tar -xzvf pycurl-7.43.0.tar.gz cd pycurl-7.43.0/ sudo python setup.py --with-ssl install
Zainstalował pycurl globalnie, ale nie w ramach virtualenv. Nie sprawdziłem też, czy został zainstalowany z obsługą SSL, czy nie, ale myślę, że nadal bez SSL.
Część 3. Ponowna instalacja curl i curllib
W końcu zrozumiałem, że pycurl nie instaluje się normalnie w środowisku, ponieważ global curl i libcurl są kompilowane za pomocą gnutls.
Przed rozpoczęciem sprawdź to za pomocą:
Jedna z linii wyjściowych będzie
Aby go ponownie skompilować:
Najpierw usuń zwijanie:
Zainstaluj wszystkie zależności kompilacji potrzebne do curl
Pobierz najnowsze (stan na 20 grudnia 2016 r.) Libcurl
mkdir ~/curl wget http://curl.haxx.se/download/curl-7.51.0.tar.bz2 tar -xvjf curl-7.51.0.tar.bz2 cd curl-7.51.0
Typowe kroki tworzenia aplikacji ze źródła
Jeśli openssl jest poprawnie zainstalowany, configure znajdzie go automatycznie. Wynik będzie:
Rozwiązywanie wszelkich problemów z pamięcią podręczną lokalizacji bibliotek na poziomie C („pamięć podręczna bibliotek współdzielonych”)
Teraz spróbuj ponownie zainstalować pycurl w środowisku:
curl -O https://pypi.python.org/packages/source/p/pycurl/pycurl-7.43.0.tar.gz pip install pycurl-7.43.0.tar.gz --global-option="--with-openssl"
Wynik powinien być:
python import pycurl pycurl.version
źródło
Dla każdego, kto ma problem z PyCharm CE na macOS Mojave, oto jak sprawiłem, że działa w venv:
źródło
To zadziałało dla mnie:
źródło
Próbowałem wszystkiego tutaj na macOS 10.13 bez powodzenia. Następnie znalazłem https://gist.github.com/webinista/b4b6a4cf8f158431b2c5134630c2cbfe, który działał:
brew install curl --with-openssl pip uninstall pycurl export PYCURL_SSL_LIBRARY=openssl export LDFLAGS=-L/usr/local/opt/openssl/lib;export CPPFLAGS=-I/usr/local/opt/openssl/include; pip install pycurl --compile --no-cache-dir
Działało to dla mnie zarówno wtedy, gdy nie korzystałem z virtualenv, jak i w ramach virtualenv.
źródło
Nie jestem pewien, czy dzieje się tak z powodu działania w virtualenv, ale w CentOS 7 te rozwiązania nie działały dla mnie; skompilowane obiekty nadal były pobierane z katalogu pamięci podręcznej, kiedy instalowałem ponownie. Jeśli napotykasz ten sam problem po wypróbowaniu innych rozwiązań tutaj, wypróbuj następujące rozwiązania:
źródło
--no-cahe-dir
opcji. Chcę tylko wspomnieć, że udało mu się uruchomić tylko z rootem,su -
jak zasugerował @alfonso. Robieniesudo pip3 ...
nie było wystarczająco dobre. Prawdopodobnie jest to konieczne do pobrania zmiennej środowiskowej.Błąd:
To zadziałało dla mnie, Mac 10.13, python 3.5, import pycurl działał po zainstalowaniu w ten sposób
pip3 uninstall pycurl; pip3 install --compile --install-option="--with-openssl" pycurl
źródło
Po długim czasie utknąłem w tym miejscu, dowiedziałem się, że firma Apple przestała zawierać nagłówki OpenSSL od czasu OS X 10.11 El Capitan. jak naprawić?
1) brew install openssl 2) echo 'export PATH="/usr/local/opt/openssl/bin:$PATH"' >> ~/.bash_profile (or .zshrc for zsh, etc) 3) pip uninstall pycurl 4) pip install --install-option="--with-openssl" --install-option="--openssl-dir=/usr/local/opt/openssl" pycurl
źródło
Ten sam problem na amazonlinux - rozwiązany
Miałem ten problem podczas tworzenia obrazu dockera w oparciu o amazonlinux, instalowania Pythona3.7 i dodawania modułu pycurl. Wszystkie inne moduły Pythona zostały poprawnie zainstalowane z wyjątkiem pycurl. Po wypróbowaniu wielu rozwiązań zaproponowanych w wątkach związanych z tym problemem ostatecznie rozwiązałem swój problem, używając następujących poleceń do instalacji wszystkich elementów.
yum -y install python3 python3-devel gcc libcurl-devel aws-cli openssl-static.x86_64
następnie zainstalowałem inne moduły, takie jak psycopg2-binary, request, certifi, używając:
pip3 install --user --no-cache-dir -r requirements.txt
i ostatecznie zainstalowany moduł pycurl przy użyciu:
pip3 install --user --global-option="--with-openssl" --no-cache-dir pycurl
i przekazując tutaj opcję globalną openssl. Instalacja biblioteki statycznej openssl-static.x86_64 rozwiązała problem w moim przypadku, ponieważ wykorzystano opcję globalną używaną przez drugie polecenie pip3.
źródło
W przypadku Pythona 2.7
W przypadku Pythona 3.5 zainstaluj również następną:
sudo apt-get install python3.5-dev
Pobierz najnowsze źródło pycurl-7.43.0.tar.gz (md5) z pypi https://pypi.python.org/pypi/pycurl/7.43.0#downloads i uruchom następną komendę:
python setup.py --with-openssl install
Możesz to również zrobić w środowisku Pythona:
(test_env)user@pc:~/Downloads/pycurl-7.43.0$ python setup.py --with-openssl install
źródło
pip install -U pip if [ "$(curl --version | grep NSS 2>/dev/null)" ]; then pip install --compile --install-option="--with-nss" pycurl else pip install --compile --install-option="--with-openssl" pycurl fi
źródło
Napotkałem ten problem i odpowiedź Sanketa Jagtapa zadziałała dla mnie. Wypróbowałem odpowiedź z największą liczbą głosów, ale nie zadziałała.
Moja stara wersja openssl to 1.0.1t, myślę, że ponowna instalacja openssl może rozwiązać ten problem.
--- pycurl's openssl backend time....
Przebudowałem najnowszy openssl i wypróbowałem tę odpowiedź. Sprawdź to.
pip install --compile --install-option="--with-openssl" pycurl
To zadziałało dla mnie.
Zalecam ponowne zainstalowanie naszego openssl, aby spróbować ...
źródło
Następujące pracowałem dla mnie z Python3.6
MacOS High-Sierra
sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-openssl" pycurl
CentOS 7
sudo pip3 uninstall pycurl sudo pip3 install --compile --install-option="--with-nss" pycurl
źródło
To łącze podsumowuje przyczynę wystąpienia błędów i zawiera jasną instrukcję rozwiązania problemu.
https://cscheng.info/2018/01/26/installing-pycurl-on-macos-high-sierra.html
Dla mnie problem wystąpił, gdy przeszedłem na High-Sierra z El Captain.
źródło
FWIW, napotkałem wiele problemów, aby to działało przez AWS Elastic Beanstalk i w końcu udało mi się to zrobić z:
packages: yum: openssl-devel: [] libcurl-devel: [] container_commands: # Reinstall PyCurl with correct ssl backend 05_reinstall_pycurl: command: | pip install --upgrade pip pip uninstall -y pycurl pip install --global-option='--with-openssl' pycurl
źródło
Ostatnio podczas aktualizacji projektu Django miałem podobny błąd. Ale tym razem ustawienie zmiennej środowiskowej nie zadziałało. Musiałem więc ustawić zarówno zmienną środowiskową, jak
export PYCURL_SSL_LIBRARY=openssl
i przekazać flagę--global-option="with-openssl"
.Oryginalna odpowiedź została opublikowana na tej stronie
źródło
export CPPFLAGS=-I/usr/local/opt/openssl/include export LDFLAGS=-L/usr/local/opt/openssl/lib pip install pycurl --global-option="--with-openssl"
źródło