tex*_*nic 5 python ssh ubuntu virtualenv paramiko
我在Windows中使用Python和Django的经验有限,现在我想了解如何将代码部署到Ubuntu 16.04 LTS VPS。阅读了关于SE的各种教程和很多答案之后,我设法进行了很长时间(对我而言),但是现在我陷入了困境。
手动(通过腻子)我可以执行以下操作:
# 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) droplet@hostname:~$
# check that python3 is taken from venv
which python3 # /home/droplet/Env/firstsite/bin/python3
Run Code Online (Sandbox Code Playgroud)
因此,虚拟环境已正确创建并打开。我可以继续安装Django。
但是,当我尝试使用Paramiko在自动方式中执行完全相同的操作(我使用执行命令paramiko.SSHClient().exec_command(cmd, input_string, get_pty=False)时,一切都以相同的方式进行,直到最后一条命令为止:
exec_command('which python3')
Run Code Online (Sandbox Code Playgroud)
返回/usr/bin/python3。因此,我认为source activate通过Paramiko的SSH无法正常工作。
摘自 @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)
Run Code Online (Sandbox Code Playgroud)
就我而言(使用 miniconda 和一个名为 pyODBC 的环境):
stdin, stdout, stderr = ssh.exec_command(~/miniconda2/envs/pyODBC/bin/python run_script.py)
Run Code Online (Sandbox Code Playgroud)
运行命令~/miniconda2/envs/pyODBC/bin/python -m pip list打印此环境中的模块列表以进行确认
| 归档时间: |
|
| 查看次数: |
1165 次 |
| 最近记录: |