web-dev-qa-db-ja.com

ImportError:pexpectという名前のモジュールがありません

私はFabricを使用していますが、fexpectを使用したいと思います。私は次のPythonスクリプトを持っています:

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')

実行すると、次のエラーが発生します。

[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

私はvirtualenvを使用していますが、pexpectが実際にインストールされています。

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

解決策を見つけました。

pexpectは、リモートマシンのPythonインストールの一部ではありませんでした。

私は単に実行しました

Sudo -E pip install pexpect 

リモートマシン上。

15
mitchkman

実際、スクリプトでfexceptを使用している場合、実行する必要のあるコマンドは実際には次のとおりです。

Sudo -E pip install fexpect 
1
Alexandre Mazel

あなたの質問に対する直接の答えではありませんが、システムパッケージのインストールには、シェフ、パペット、ソルトなどのツールの方が適しています。

0