2014-03-26 12 views
5

Ich benutze Fabric und möchte fexpect verwenden. Ich habe folgende Python-Skript:ImportError: Kein Modul namens pexpect

from ilogue.fexpect import expect, expecting, run 

(...) 

def install_postgresql(profile): 
print("!!! Installing PostgreSQL...") 
print(' -> Doing pre-cleanup...') 

# Remove PostgreSQL if it exists 

prompts = [] 
prompts += expect('Do you want to continue [Y/n]? ', 'Y') 

with settings(warn_only=True): 
    with expecting(prompts): 
     run('sudo apt-get purge postgresql') 

print(' -> Doing actual installation...') 

# Install PostgreSQL 

prompts = [] 
prompts += expect('Do you want to continue [Y/n]? ', 'Y') 

with expecting(prompts): 
    run('sudo apt-get install postgresql') 

# In some cases PostgreSQL has issues with Ubuntu's default kernel params 
# that prevent PostgreSQL to start automatically, so we try to start it 
# TODO: Fix it 
with settings(warn_only=True): 
    run('sudo service postgresql start') 

Bei der Ausführung ich die folgende Fehlermeldung erhalten:

[xxx.xxx.xxx.xxx] out: Traceback (most recent call last): 
[xxx.xxx.xxx.xxx] out: File "/tmp/fexpect_MbW3QP6Zpy5KBjBGQcaYxi", line 4, in <module> 
[xxx.xxx.xxx.xxx] out:  import pexpect 
[xxx.xxx.xxx.xxx] out: ImportError: No module named pexpect 

Ich verwende virtualenv und pexpect tatsächlich installiert:

(venv)PALM00545424A:woopup i841712$ pip install pexpect 
Requirement already satisfied (use --upgrade to upgrade): pexpect in ./venv/lib/python2.7/site-packages 
+0

Ist es 'fexpect' oder' pexpect'? – Selcuk

+1

fexpect ist eine Fabric-Erweiterung, die von Pexthons pexpect abhängt. So ist es eigentlich richtig. – mitchkman

Antwort

13

die Lösung gefunden.

pexpect war nicht Teil der Python-Installation der Remote-Maschine.

ich ausgeführt einfach

sudo -E pip install pexpect 

auf dem entfernten Rechner.

+0

Froh, dass Sie eine Lösung gefunden haben, aber es sollte nicht notwendig sein, pexpect auf der Fernbedienung installiert zu haben. Das Modul wird normalerweise zusammen mit dem fexpect-Befehlsskript gesendet. –

+0

Wenn Sie dies weiter gerne als Problem bei https://github.com/ilogue/fexpect/issues?state=open veröffentlichen möchten, wäre es hilfreich, die Ausgabe von 'ls/tmp' zu sehen die Fernbedienung –

0

Keine direkte Antwort auf Ihre Frage, aber Tools wie Koch, Puppet oder Salz sind besser für die Installation von Systempaketen geeignet.

+0

Ja, ich habe es schon überlegt, aber Fabric ist viel leichter als zB Chef und mehr geradlinig – mitchkman

1

In der Tat, wenn Ihr Skript verwendet fexcept, der Befehl Sie ausführen müssen, ist eigentlich:

sudo -E pip install fexpect