Linux迁移python virtualenv至新用户

前几天KDE不断崩溃冻结,似乎是新kernel的问题(更新:似乎不是内核问题,应该是安装的第三方KDE主题/插件的问题)。无赖之下创了个新用户,重新配置了下KDE,并且把之前的重要文件都搬过来了。

今天编程时,发现virtualenv里的pip不能用了,例如下载包时会报错:

Defaulting to user installation because normal site-packages is not writeable

这句话有极大的误导性,我翻了翻sites-packages,发现权限啥的都配置得好好的,网上暂未发现解决办法,为什么出问题了呢?

直接说结论:virtualenv在新建虚拟环境时,会在多个文件里使用这个虚拟环境的绝对路径,例如“/home/abc/Codes/mypython”。

我们需要把这个路径里的abc替换为我们现在的用户名,这样就可以继续愉快使用之前的项目了。

在虚拟环境的目录下操作,步骤如下:

cd bin/
find ./ -maxdepth 1 -type f -exec sed -i 's#/home/abc#/home/now#g' {} \;
cd ../lib/python3.10/site-packages/
find ./ -maxdepth 1 -type f -exec sed -i 's#/home/abc#/home/now#g' {} \;

上面代码的含义是:在bin目录和site-packages目录下,查找递归深度为1的文件,将其中的“/home/abc”全部替换为“/home/now”(根据自己的用户名来替换)。

重新激活虚拟环境,一切正常!