背景
最近在Windows下面运行一个类似下面的脚本时遇到了一些问题,
1 2 3 4 5 |
import os from config import request_params for i in request_params['params']: os.system("python main.py" + "-i " + i) |
是这样的,我的win10上装了两个python解释器,一个是用python官方提供的exe装的python3.7,一个是用pyenv-win装的2.7.8,然后执行了pyenv global 2.7.8,但是好像没什么卵用,命令行输入python仍然进的是3.7的交互式环境,
紧接着我们再来说说上面这个脚本,上面os.system()调用的那个main.py是主要执行的脚本,只兼容python2,问题出在哪呢,系统只会用python官方提供的exe装的python3.7来执行我这个main.py,那我这个main.py肯定要报错呀,
当时各种折腾都搞不定,现在想想如果我所有的python版本都用pyenv-win来维护,说不定就没问题了,也即是不用python官方提供的exe来安装python了,我当时主要图用其自带的pip安装pyenv-win比较标准化一些。
最后,不管怎么说吧,上了WSL2的这条船,不得不说,打开了新的一片天地。
碎碎念
下面WSL2迷弟碎碎念时间:
在WSL2下面,oh-my-zsh一切正常,号称vim史上最难安装的插件youcompleteme一键编译成功,同样,python2.7.8,python3.7.9,以及Nginx均一键编译成功,最后pyinstaller也打包正常,我不得不说一下WSL2大法好呀~
接着来念叨一点别的:
我们都知道微软官方并没有在windows store里面提供官方支持的centos安装包,即使是从微软官方这里手动下载那个.appx文件用命令安装也是和windows store里面安装一样都没有centos,那大家为啥执着于一定要用centos呢,想必均是想和服务器端环境保持一致,毕竟大部分公司服务器端都用的是centos嘛。
弯路
由于WSL安装centos,网上一般都推荐用LxRunOffline来安装,老实说我也装了,但是有个问题哈,LxRunOffline安装的centos是没有exe文件的,而这里的pycharm官方文档中的添加wsl自定义发行版的配置中有个<executable-path>c:/linux/arch.exe</executable-path>
的标签,里面的值必须是个exe文件的相对或绝对路径,
我折腾过把里面的值设置为“D:\WSL\LxRunOffline.exe run -n centos”,可是这里面一有空格最后pycharm好像就会报错,或者pycharm在add python interpreter的WSL选项的界面里根本不显示你自定义的发行版的名字,
还折腾过把“LxRunOffline s -d”命令生成的快捷方式的路径放在上面那个<executable-path>
标签里面,最后来来回回几遍都不行.
按照上面两种方式反反复复搞了一个下午都没能让pycharm支持WSL centos里面的python。
终极解决方案
[$]
其实很简单哦,
1. 访问 CentOS 的官方 Docker 镜像网站:CentOS Cloud SIG image repository.;
2. 切换到自己想要的分支,比如:CentOS-7.0.1406;
3. 进入 docker 目录,下载centos-*-docker.tar.xz文件,比如:centos-7.0.1406-20150304_1234-docker.tar.xz
然后找个虚拟机Linux系统(可以考虑微软官方的WSL Ubuntu)把刚下载好的centos-7.0.1406-20150304_1234-docker.tar.xz弄进去,
如果你是centos,执行sudo yum install xz,
如果你是上面提到的微软官方的WSL Ubuntu可以执行下面的命令:
sudo apt install xz-utils
然后以上面centos-7.0.1406-20150304_1234-docker.tar.xz为例,执行下面的命令:
1 2 3 4 5 |
$ mkdir tmp/ $ sudo tar xf centos-7.0.1406-20150304_1234-docker.tar.xz -C tmp $ cd tmp $ sudo tar czvf ../rootfs.tar.gz ./* |
然后把生成的rootfs.tar.gz从虚拟机Linux里面弄出来,
比如说放到windows下面的D:\WSL\CentOS7\下面, 接着一定要重命名一下,比如为CentOS7.exe,
再紧接着去这里找个最新的版本,把里面的Launcher.exe下载下来,
然后放到前面提到的D:\WSL\CentOS7\下面,接着打开powershell,cd到D:\WSL\CentOS7\下面,
然后运行 .\CentOS7.exe, 这个命令执行完之后他会生成一个虚拟机文件,不用管它,
最后我们要来添加前面提到的wsl自定义发行版的配置了,
下面以windows下的pycharm 2020.2 为例:
先到windows的资源管理器下面把%APPDATA%\JetBrains 粘贴到地址栏里面回车,然后双击pycharm 2020.2 这个文件夹进去,
再然后找个文本编辑器打开options文件夹里面的wsl.distributions.xml,然后找到里面的<descriptor></descriptor>
标签同级的地方,
我们以上面配置的CentOS7.exe为例,把下面的内容添加进去:
1 2 3 4 5 6 7 |
<descriptor> <id>CentOS-7</id> <microsoft-id>CentOS7</microsoft-id> <executable-path>D:\WSL\CentOS7\CentOS7.exe</executable-path> <presentable-name>CentOS7.0</presentable-name> </descriptor> |
最后,重启你的pycharm,就可以在add python interpreter的WSL选项里面看到你刚刚新增的CentOS7.0这个选项了。
All done, Cheers!
[/$]
Show Time
下面为了证明我的方式是ok的,啥也不说了,直接上截图吧
WSL 2与windows的文件交互速度非常慢。只能使用WSL 1
@test
cd到Linux文件系统呀,在/mnt/d 下面做开发io确实不行