web-dev-qa-db-de.com

Pip Install nicht im richtigen Verzeichnis installiert?

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/
22
Chris

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. 

25
Roy2012

Dies hat bei mir unter Windows funktioniert. Die Ursache sind mehrere Python-Installationen

  1. pfad mit korrektem Python aktualisieren
  2. deinstalliere pip mit python -m pip uninstall pip setuptools
  3. windows neu starten funktionierte nicht bis zum Neustart
4
Jabda

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. 

2
Wyrmwood

1 - Etwas, das funktionieren könnte

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.

2 - Was sollten Sie tun?

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, virtualenvs 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.

2
user1940040

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. 

1
Emily
  1. download pip unter https://pypi.python.org/pypi/pip (tar)
  2. entpacken Sie die tar-Datei
  3. cd in das Verzeichnis der Datei
  4. Sudo python2.7 setup.py installieren
0
salomeow

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.

0
user9950741