Ich kann Sudo pip scheinbar nicht korrekt installieren, sodass es in folgendem Verzeichnis installiert wird:
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
so dass ich dann das modul mit python importieren kann
Ich bin gerannt
Sudo pip install scikit-learn --upgrade
Ergebnis
Requirement already up-to-date: scikit-learn in /usr/local/lib/python2.7/site-packages
Cleaning up...
Es befindet sich jedoch nicht im richtigen Verzeichnis
Wie bekomme ich die Installation von Sudo pip in das richtige Verzeichnis?
Außerdem habe ich es versucht
Sudo pip installieren Scrappy
Ich erhalte die folgende Nachricht
new-Host-2:site-packages Chris$ Sudo pip install Scrapy
Password:
Requirement already satisfied (use --upgrade to upgrade): Scrapy in /usr/local/lib/python2.7/site-packages
Requirement already satisfied (use --upgrade to upgrade): Twisted>=10.0.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): w3lib>=1.8.0 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): queuelib in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): lxml in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pyOpenSSL in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cssselect>=0.9 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): six>=1.5.2 in /usr/local/lib/python2.7/site-packages (from Scrapy)
Requirement already satisfied (use --upgrade to upgrade): zope.interface>=3.6.0 in /usr/local/lib/python2.7/site-packages (from Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cryptography>=0.2.1 in /usr/local/lib/python2.7/site-packages (from pyOpenSSL->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/local/lib/python2.7/site-packages (from zope.interface>=3.6.0->Twisted>=10.0.0->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): cffi>=0.8 in /usr/local/lib/python2.7/site-packages (from cryptography>=0.2.1->pyOpenSSL->Scrapy)
Requirement already satisfied (use --upgrade to upgrade): pycparser in /usr/local/lib/python2.7/site-packages (from cffi>=0.8->cryptography>=0.2.1->pyOpenSSL->Scrapy)
Beide Fälle zeigen, dass es installiert wurde, aber nicht korrekt. Wenn ich zum Beispiel den folgenden Import in Python ausführen:
import scrapy
---------------------------------------------------------------------------
ImportError Traceback (most recent call last)
<ipython-input-6-51c73a18167b> in <module>()
----> 1 import scrapy
ImportError: No module named scrapy
Ich habe folgendes versucht:
Sudo ln -s /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/
Von den Kommentaren bis zur ursprünglichen Frage scheint es, als hätten Sie mehrere Python-Versionen installiert, und dieser Pip wird nur in die falsche Version verschoben.
Um zu wissen, welche Python-Version Sie verwenden, geben Sie einfach which python
ein. Sie sollten entweder sehen:
which python
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
wenn Sie zur richtigen Version von Python gehen, oder:
which python
/usr/bin/python
Wenn Sie zur "falschen" Version gehen. Damit pip zur richtigen Version wechselt, müssen Sie zunächst den Pfad ändern:
export PATH=/Library/Frameworks/Python.framework/Versions/2.7/bin/python:${PATH}
wenn Sie "welcher Python" eingeben, erhalten Sie jetzt das richtige Ergebnis. Als nächstes installieren Sie pip (falls es für diese Installation von Python noch nicht installiert ist). Verwenden Sie es schließlich. dir sollte es jetzt gut gehen.
Dies hat bei mir unter Windows funktioniert. Die Ursache sind mehrere Python-Installationen
python -m pip uninstall pip setuptools
Virtualenv ist dein Freund
Selbst wenn Sie ein Paket zu Ihrer primären Installation hinzufügen möchten, sollten Sie dies immer noch in einer virtuellen Umgebung tun, um die Kompatibilität mit Ihren anderen Paketen sicherzustellen. Wenn Sie sich jedoch mit virtualenv vertraut machen, werden Sie wahrscheinlich feststellen, dass es wirklich keinen Grund gibt, etwas in Ihrer Basisinstallation zu installieren.
Die ausführbare pip
-Datei ist eigentlich ein Python-Skript.
Standardmäßig enthält es (unter Linux):
#!/usr/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==1.5.6','console_scripts','pip'
__requires__ = 'pip==1.5.6'
import sys
from pkg_resources import load_entry_point
if __== '__main__':
sys.exit(
load_entry_point('pip==1.5.6', 'console_scripts', 'pip')()
)
Wenn Sie also unter MacOS dasselbe haben, würde pip
immer /usr/bin/python
verwenden.
Dies ist jedoch ein Standard. Sie können immer noch die gewünschte Python-Version bereitstellen, indem Sie die Datei bearbeiten oder explizit Python verwenden.
Wenn which python
/usr/bin/python
zurückgibt, ist bei der Installation einer eigenen Version ein Fehler aufgetreten. Wenn es /Library/Frameworks/Python.framework/Versions/2.7/bin/python
ist, können Sie direkt anrufen:
Sudo python `which pip` install scikit-learn --upgrade
Die Chancen stehen jedoch hoch, dass es nicht funktioniert. Der Grund ist, dass Sudo
alle Umgebungsvariablen zurücksetzt. Damit es funktioniert, ist es am einfachsten zu verwenden:
Sudo -E pip install scikit-learn --upgrade
oder
Sudo -E python `which pip` install scikit-learn --upgrade
abhängig von Ihrem Setup.
pip
wurde nicht als etwas betrachtet, das root
ausführen sollte. Der beste Weg, um es zu benutzen, ist die Installation einer lokalen Python-Version, die kein Root ist. Sie müssen lediglich sicherstellen, dass Sie sie standardmäßig verwenden, indem Sie die korrekten Umgebungsvariablen einrichten (z. B. PATH
unter Linux) und anschließend pip
ohne Sudo
mit dieser Python-Version installieren.
Ein noch besserer Weg wäre, virtualenv
s von Ihrer Root-Installation aus einzurichten.
Auf diese Weise können Sie ohne Root-Privilegien installieren und aktualisieren, was immer Sie möchten, und sich nie wieder darum kümmern, warum Sudo pip
nicht funktioniert. Sie würden auch vermeiden, Root-Berechtigungen für alles, was sich auf Pypi befindet, bereitzustellen, und dies würde garantieren, dass Sie keine System-Libs mit Ihren eigenen mischen.
Ich stimme den Jungs vollkommen zu, es ist besser, virtualenv zu verwenden, damit Sie für jedes Projekt eine benutzerdefinierte Umgebung einrichten können. Es ist ideal für die Wartung, da es für jedes Projekt wie eine andere Welt ist und jedes Update einer Anwendung, die Sie vornehmen, keine Auswirkungen auf andere Projekte hat.
Hier finden Sie eine Zusammenfassung von virtualenv in Bezug auf Installation und erste Schritte.
Sie könnten einfach die Shebang-Linie ändern. Ich mache das ständig mit neuen Systemen.
Wenn Sie möchten, dass pip
auf einer aktuellen Version von Python installiert wird, aktualisieren Sie einfach die Shebang-Zeile auf den korrekten Pfad des Pythons.
So ändern Sie beispielsweise pip (nicht pip3) zur Installation auf Python 3:
#!/usr/bin/python
Zu:
#!/usr/bin/python3
Jedes Modul, das Sie mit pip
installieren, sollte auf Python installiert werden, nicht auf Python.
Oder Sie könnten einfach den Pfad ändern.