awscli wird nach der Installation nicht zum Pfad hinzugefügt

78

Ich habe die aws cli gemäß den offiziellen Amazon-Anweisungen installiert.

sudo pip install awscli

Es awsist jedoch nirgends auf meinem Weg zu finden. Die Installation scheint erfolgreich gewesen zu sein. Es gibt eine Reihe von Dateien unter /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli, es sind jedoch keine ausführbaren Dateien benannt aws. Meine Python-Version ist 3.3.4, meine Pip-Version ist 1.5.4 und ich führe diesen Befehl unter OS X 10.9 aus. Was könnte falsch sein?

Vielen Dank!

Max
quelle
kannst du importieren Haben Sie überprüft, ob die Bibliothek in PYTHONPATH?
Shawn Zhang
Warum hast du sudo benutzt? War es wirklich notwendig?
CGTheLegend

Antworten:

113

Verbesserung der Antwort des OP

Das OP beantwortete seine eigene Frage, aber der genaue Speicherort der ausführbaren Datei ist mit größerer Wahrscheinlichkeit anders als derselbe. Lassen Sie uns also zusammenfassen, WARUM seine Lösung funktioniert hat, damit Sie sie auf sich selbst anwenden können.

Aus dem Problem

Es gibt eine Reihe von Dateien unter /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli, es gibt jedoch keine ausführbaren Dateien mit dem Namen aws.

Aus der Lösung

Die Lösung bestand darin /Library/Frameworks/Python.framework/Versions/3.3/bin, meinen Pfad hinzuzufügen .

Lass uns etwas lernen

Vergleichen Sie diese Pfade, um ihre Gemeinsamkeiten zu finden:

/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/awscli
/Library/Frameworks/Python.framework/Versions/3.3/bin

Beachten Sie, dass sie auseinander gehen libvs. bin. Und bedenken Sie, dass das OP sagte: " Es gibt keine ausführbaren Dateien mit dem Namen aws. " Das bringt uns zu unseren ersten Lektionen:

  • Ausführbare Dateien befinden sich normalerweise nicht in libOrdnern.
  • Suchen Sie nach binOrdnern, die eine gemeinsame Linie haben.

In diesem Fall hätte ich vorgeschlagen, nach binOrdnern zu suchen über:

find /Library/Frameworks/Python.framework -type d -name bin

Aber wenn Sie das tun, können Sie genauso gut nach Ihrer ausführbaren Datei suchen über:

find /Library/Frameworks/Python.framework -type f -perm -100 -name aws
# the `-` in `perm -100` means not an exact match of 100
# but any octal that includes 100

Aber warte

Woher wusste OP, dass sie in ihre schauen sollten /Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/?

Die einfachste Antwort ist auch unsere nächste Lektion:

  • Fragen Sie Ihren Python, wo die Dinge installiert sind.

So mache ich das:

$ python -c 'import awscli; print(awscli)'
<module 'awscli' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/awscli/__init__.pyc'>

$ python3 -c 'import awscli; print(awscli)'
<module 'awscli' from '/System/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/awscli/__init__.py'>

Ich habe 2 Pythons und keiner von ihnen verwendet die gleichen Pfade oder sogar Pfadmuster wie das OP.

Wenden Sie an, was wir gelernt haben

$ find /System/Library/Frameworks/Python.framework -type d -name bin
/System/Library/Frameworks/Python.framework/Versions/2.7/bin
/System/Library/Frameworks/Python.framework/Versions/3.6/bin

$ find /System/Library/Frameworks/Python.framework -type f -perm -100 -name aws
/System/Library/Frameworks/Python.framework/Versions/2.7/bin/aws
/System/Library/Frameworks/Python.framework/Versions/3.6/bin/aws

Wie Sie sehen können, habe ich 2 binOrdner und 2 awsausführbare Dateien. Ich möchte wahrscheinlich die Python3.6-Version verwenden. Wenn ich jedoch lokale Test- und Fehlerarbeiten für ein Remote-System durchführe, das die Python2.7-Version verwendet, möchte ich dies verwenden. Und genau deshalb habe ich 2 Version installiert.

Bruno Bronosky
quelle
15
Eine der besten Antworten, die ich je auf Stack Overflow gefunden habe. Vielen Dank!
Paul Janicki
2
@VishalDesai Die Art und Weise, wie Sie sich fühlen, ist, warum ich Dinge wie Schritt 4 in stackoverflow.com/a/41994024/117471 hinzufüge. Ja, es ist schwierig, eine solche Liste durchzugehen , wenn Sie eine schnelle Lösung wünschen. Diese funktionieren jedoch nur für Systeme, die genau mit denen des Autors übereinstimmen. Ich schreibe Antworten wie diese, nachdem ich jede Antwort ausprobiert habe, die ich finden konnte, und nichts hat funktioniert. Diese Antworten werden in meinem DevOps-Teamhandbuch verlinkt, da wir eine Menge nicht standardmäßiger Systeme unterstützen müssen. Ich schreibe Antworten, die für ALLE funktionieren . Hoffentlich funktioniert das für MEHR von Ihnen . Entschuldigung, es hat bei dir nicht funktioniert. Schlaf etwas.
Bruno Bronosky
2
Entschuldigung für den gestrigen Kommentar. Der zweite Kommentar hat tatsächlich bei mir funktioniert. Ich habe etwas geschlafen, mich verjüngt und die Lösung kam kurz danach vorbei.
Vishal Desai
2
@BrunoBronosky, danke für diese Antwort. Sie spricht gut für die Menschheit, wenn sich jemand die wertvolle Zeit nimmt, um die Dinge für das Gemeinwohl im Detail zu erklären.
Davecoffin
1
@danmux ist korrekt und das neue MacOS-Sicherheitsmodell möchte, dass Sie die --userInstallation anstelle der sudoInstallation durchführen. Und deshalb python -c 'import awscli; print(awscli)'ist es so wichtig. Dieser Pfad wird erkannt. Alle SO-Antworten sollten erklären, "wie man die Antwort bekommt" und nicht "das hat bei mir funktioniert". Nicht kritisch zu sein. Mir ist klar, dass einige Leute nicht wissen, wie sie diese Forschung betreiben sollen. In diesem Fall kann ihre Antwort jemand anderem helfen, mitzukommen und sie zu erweitern, um universeller zu sein. Dies ist ein großartiges Beispiel dafür.
Bruno Bronosky
73

Das hat bei mir auf dem Mac funktioniert:

sudo -H pip install awscli --upgrade --ignore-installed six
dheeraj .A
quelle
1
Dies war die einfache Lösung und das Beste für nicht so nerdige Typen, die es nur brauchen, um schnell zu arbeiten.
Athul
2
Kann jemand erklären, wie das funktioniert? Es funktionierte ohne Probleme
tt_Gantz
1
Aus irgendeinem Grund funktioniert dies auch mit pip3, um die AWS Python 3-Version zu installieren.
Renatoaraujoc
LEGENDE Dheeraj! :)
Yavar
👍, gracias, für den Kontext hat es bei mir nicht funktioniert, weil ich Python unter installiert hatte. anaconda3
VelLes
42

Von http://docs.aws.amazon.com/cli/latest/userguide/cli-install-macos.html#awscli-install-osx-path

Für Modern Macos / OSX müssen Sie Ihr ~/Library/Python/$version/binVerzeichnis finden und Ihrem hinzufügen $PATH. Dies hilft Ihnen bei der Suche nach dem awsInstallationsort.

$ ls -d ~/Library/Python/*/bin/aws
/Users/bbronosky/Library/Python/3.6/bin/aws

Auf dieser Grundlage habe ich diese Zeile zu meiner hinzugefügt .bashrc

export PATH=$HOME/Library/Python/3.6/bin:$PATH
Bruno Bronosky
quelle
24

Unter Ubuntu und mit pip3 ohne sudo installiert, war der richtige Speicherort, den ich meinem Pfad hinzufügen konnte ~/.local/bin:

export PATH=$HOME/.local/bin:$PATH
vlz
quelle
10

Die Lösung bestand darin, hinzuzufügen

/Library/Frameworks/Python.framework/Versions/3.3/bin

zu meinem Pfad.

Max
quelle
Oder wo immer sich Ihr Python befindet (in meinem Fall war es /opt/local/Library/Frameworks/Python.framework/Versions/3.4)
Jewgenij
2
Dies ist eine sehr "egoistische" Antwortauswahl. Es tut wirklich nichts für die Gemeinschaft.
Bruno Bronosky
Ich nahm Ihre Antwort und erklärte sie unter stackoverflow.com/a/42984351/117471
Bruno Bronosky
9

Kann verwenden pip show awscli, um den Installationsort zu finden.

$ pip show awscli
Name: awscli
Version: 1.16.94
Summary: Universal Command Line Environment for AWS.
Home-page: http://aws.amazon.com/cli/
Author: Amazon Web Services
Author-email: UNKNOWN
License: Apache License 2.0
Location: /root/.local/lib/python2.7/site-packages
Requires: s3transfer, colorama, rsa, docutils, botocore, PyYAML
Required-by:
wltheng
quelle
1
Danke, dieser hat geholfen, es schnell einzugrenzen :).
John Humphreys - w00te
3

Ich habe ein Upgrade von OSX 10.7 auf OSX 10.9 durchgeführt und danach funktionierte meine Installation von aws nicht mehr.

Ich habe folgende Fehler beobachtet:

$ pip
Traceback (most recent call last):
  File "/usr/local/bin/pip", line 5, in <module>
    from pkg_resources import load_entry_point
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 2603, in <module>
working_set.require(__requires__)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 666, in require
needed = self.resolve(parse_requirements(requirements))
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/pkg_resources.py", line 565, in resolve
    raise DistributionNotFound(req)  # XXX put more info here
pkg_resources.DistributionNotFound: pip==1.5.5

Die Lösung, dass das Betriebssystem-Upgrade die Berechtigungen geändert hatte.

Werbegeschenk Hinweis:

sudo pip <--- hat funktioniert

pip <--- fehlgeschlagen

Also habe ich das gemacht:

sudo chmod -R a+r /Library/Python/

und danach kann ich die aws-befehle wieder verwenden.

Ich bin mir nicht sicher, ob dies für andere hilfreich sein wird, aber ich dachte, ich würde es in die Mischung werfen.

Bill Mitchell
quelle
2

Bei der Installation in einer virtuellen Umgebung: 'pip install awscli' (ohne sudo) funktionierte unter OS X einwandfrei. aber nicht in CentOS Release 6.6, zB 'which aws' hat nichts gefunden. Die Lösung:

chmod u+x /PATH-TO-YOUR-VIRTUALENV/bin/aws
Scott Lawton
quelle
1

Bearbeiten Sie die pathsDatei direkt, wenn Sie über Administratorrechte verfügen.

Gehen Sie auf jeden Fall mit der Top-Antwort, wenn Sie keine Administratorrechte haben, aber wenn Sie dies tun, würde ich dringend empfehlen, die pathsDateien unter direkt zu bearbeiten /etc/paths.

Verwenden Sie Ihren bevorzugten Editor und fügen Sie einfach den gewünschten Pfad in eine neue Zeile ein:

Beispieldatei paths:

/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Users/username/Library/Python/3.6/bin #new path added here at bottom of file

Fügen Sie oben oder unten oder in einer beliebigen Reihenfolge die Speicherorte ein, nach denen nach Binärdateien gesucht werden soll (falls Binärdateien mit doppelten Namen vorhanden sind).

Die Verwendung der pathsDatei erspart Ihnen das mühsame Erinnern an die Verkettungssyntax oder die potenziellen Probleme, wenn Sie eine fehlerhafte Exportanweisung schreiben.

Govind Rai
quelle
1

Normalerweise kopiere ich die ausführbare Datei nach / usr / local / bin

cp $(find / -name aws) /usr/local/bin
Proximo
quelle
Gute Antwort! Vielen Dank!
Humanier
In meinem Fall war aws /usr/bindrin und ich habe es von dort kopiert.
Dnyaneshwar Harer
0

Windows ist hier wahrscheinlich die Minderheit, aber das Hinzufügen zu meinem Pfad hat für mich funktioniert. Als Referenz habe ich die CLI über pip installiert:

C:\Python27\Scripts
Messing
quelle
0

Ich hatte ein ähnliches Problem unter Windows 10. Ich musste unten PATHVariablen hinzufügen

Für Python :

C:\Users\kumar\AppData\Local\Programs\Python\Python37\  

Für PIP :

C:\Users\kumar\AppData\Local\Programs\Python\Python37\Scripts\

Damit awscli funktioniert:

C:\Users\kumar\AppData\Roaming\Python\Python37\Scripts
kmahankali
quelle
0

Überprüfen Sie Ihre Python-Version, aber ich vermute, Sie verwenden Python 3.3

export PATH = $ HOME / Library / Python / 3.3 / bin: $ PATH

lukelan
quelle
0

export PATH=/Users/{Computer Name}/Library/Python/2.7/bin:$PATH

Nolan Jacobson
quelle
-1

Laden Sie einfach das & MSI-Installationsprogramm (64 oder 32 Bit) herunter. Installieren oder aktualisieren Sie die AWS CLI-Version 2 unter Windows mithilfe des MSI-Installationsprogramms

Nach der Installation wird möglicherweise die Fehlermeldung "'aws'" nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt. "

Aktivieren Sie einfach die Umgebungsvariable. Der Variablenname muss 'PATH' sein und den Wert "C: \ Programme \ Amazon \ AWSCLIV2" eingeben. Schließen Sie das Eingabeaufforderungsfenster und öffnen Sie es erneut. Das Problem wird behoben.

Rashid Khan
quelle