2016-08-05 15 views
3

私はWindowsでPythonとDjangoの経験が限られていますが、今は自分のコードをUbuntu 16.04 LTS VPSに配備する方法を理解しようとしています。 SEで様々なチュートリアルやたくさんの答えを読んだので、私はかなり遠くに(私にとっては)進歩することができましたが、今は私は立ち往生しています。 (パテ経由)Paramiko SSHでvirtualenvを設定する

手動で私は次の操作を行うことができます。

# check that Python 3.5 is installed 
python3 --version 
# install pip 
sudo -kS apt-get -y install python3-pip 
# upgrade pip to newest version 
pip3 install --upgrade pip 
# check result 
pip3 --version 
# install venv 
sudo -kS pip3 install virtualenv virtualenvwrapper 
# create venv 
virtualenv ~/Env/firstsite 
# make sure venv is created 
ls -l ~/Env/firstsite/bin/python # /home/droplet/Env/firstsite/bin/python3.5 -> python3 
# switch on venv 
source ~/Env/firstsite/bin/activate # (firstsite) [email protected]:~$ 
# check that python3 is taken from venv 
which python3 # /home/droplet/Env/firstsite/bin/python3 

ので、仮想環境が適切に作成され、オンになっています。私はDjangoをインストールすることができます。しかし

私はParamikoを使用して、自動化された領域で正確に同じことをしようとしています(私はparamiko.SSHClient().exec_command(cmd, input_string, get_pty=Falseを使用してコマンドを実行する)、すべてが最後のコマンドまで、まったく同じ道を行く:

exec_command('which python3') 

戻り/usr/bin/python3 。だから私はsource activateはParamikoのSSH経由で動作しないと仮定します。

  1. なぜですか?
  2. どうすれば対処できますか?
  3. venvがより直接的(信頼できる)に有効になっていることを確認できますか?

答えて

0

ここから@Pablo Navarroの回答:How to source virtualenv activate in a Bash scriptは、この同じ問題(paramiko sshセッションでの環境のアクティブ化)に役立ちました。 exec_commandで

例えば環境内のpythonの実行ファイルへのパスを与える:私の場合は

stdin, stdout, stderr = ssh.exec_command(/path/to/env/bin/python script.py) 

を(minicondaとpyODBCと呼ばれるENVを使用して):

コマンド ~/miniconda2/envs/pyODBC/bin/python -m pip listを実行している
stdin, stdout, stderr = ssh.exec_command(~/miniconda2/envs/pyODBC/bin/python run_script.py) 

確認するためにこのenvのモジュールのリストを印刷しました

関連する問題