加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

使用Paramiko SSH设置virtualenv

发布时间:2020-12-20 13:13:35 所属栏目:Python 来源:网络整理
导读:我在 Windows中使用 Python和Django的经验有限,现在我想了解如何将我的代码部署到Ubuntu 16.04 LTS VPS.在SE上阅读了各种教程和大量答案之后,我设法走得很远(好吧,对我而言),但现在我被卡住了. 手动(通过Putty)我可以做以下事情: # check that Python 3.5 i
我在 Windows中使用 Python和Django的经验有限,现在我想了解如何将我的代码部署到Ubuntu 16.04 LTS VPS.在SE上阅读了各种教程和大量答案之后,我设法走得很远(好吧,对我而言),但现在我被卡住了.

手动(通过Putty)我可以做以下事情:

# 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

因此,正确创建并打开虚拟环境.我可以继续安装Django.

然而,当我尝试在自动化方案中完全相同时,使用Paramiko(我使用paramiko.SSHClient()执行命令.exec_command(cmd,input_string,get_pty = False),一切都完全相同,直到最后一个命令:

exec_command('which python3')

返回/usr/bin/python3.所以我认为源激活不能通过Paramiko的SSH工作.

>为什么?
>我该如何应对?
>我可以通过更直接(和可靠)的方式检查venv是否已启用?

解决方法

取自@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):

stdin,stderr = ssh.exec_command(~/miniconda2/envs/pyODBC/bin/python run_script.py)

运行命令?/ miniconda2 / envs / pyODBC / bin / python -m pip list打印此env中的模块列表以确认

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读