oflyhigh avatar

每天进步一点点:迁移virtualenv环境

oflyhigh

Published: 22 Jan 2021 › Updated: 22 Jan 2021每天进步一点点:迁移virtualenv环境

每天进步一点点:迁移virtualenv环境

因为工作需要,打算将一台服务器上运行的一组程序迁移到另外一台服务器上。程序运行在virtualenv环境下,正常的方式是在目标服务器上安装设置virtualenv环境、安装依赖库、迁移程序,比较麻烦。

image.png
(图源 :pixabay)

于是我就想,既然virtualenv环境下的东西都已经包含在对应目录内,那么我直接把整个目录的内容复制到目标服务器上是否可行了,如果可以,就省事多啦。

想来想去,不如一试,撸起袖子直接干吧。

首先在目标服务器上建好用户:abcd1111,然后使用scp指令将原来服务器对应用户目录内的所有数据复制过来。

然后使用source ~/venv/bin/activate激活环境,发现能正常进入到virtualenv环境。

执行一下python指令,却提示我:

Command 'python' not found, but can be installed with:

虽然python3可以用,但是执行我的程序却提示找不到依赖库:

ModuleNotFoundError: No module named 'xxxxx'

这肯定不对,和在原来环境下执行的效果不一样,我首先想到的就是环境变量的问题,看一下环境变量:

echo $PATH

显示如下:

/home/abcd1234/venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

这很明显不对,因为abcd1234是原来服务器上的目录,新服务器上目录名为abcd1111

环境变量是哪里引进的呢,我看一下~/venv/bin/activate内容,其中包含如下片段:

VIRTUAL_ENV="/home/abcd1234/venv"
export VIRTUAL_ENV

_OLD_VIRTUAL_PATH="$PATH"
PATH="$VIRTUAL_ENV/bin:$PATH"
export PATH

我觉得把上述代码中abcd1234修改为abcd1111就应该能用了,不过安全起见,我看看bin目录中是否有别的文件应用到abcd1234这个目录名:

grep -r "abcd1234" ./

嚯,一查还一大堆:

image.png

那么只改~/venv/bin/activate可能就会有一些意想不到的问题,安全的做法是将~/venv/bin/目录中所有文件中的abcd1234修改为abcd1111

这时候,又是需要sed闪亮登场了,执行如下命令:

sed -i "s/abcd1234/abcd1111/g" `grep -rl "abcd1234" ./`

然后再去查看一下文件内容,grep -r "abcd1111" ./,可以看到都已经换成abcd1111啦:

image.png

重新登录,激活环境,然后发现无论是直接敲python进入到python环境还是直接执行我的各种脚本都没有任何问题,如丝般顺滑......

Leave 每天进步一点点:迁移virtualenv环境 to:

Written by

Programmer, Maker, Freelancer, Witness. Make friends, Make money, Make life better!

Read more #cn posts


Best Posts From oflyhigh

We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.

More Posts From oflyhigh