背景
最近在Windows下面运行一个类似下面的脚本时遇到了一些问题,
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自定义发行版的配置中有个<span class=“token tag”><span class=“token punctuation”><</span>executable-path<span class=“token punctuation”>></span></span>c:/linux/arch.exe<span class=“token tag”><span class=“token punctuation”></</span>executable-path<span class=“token punctuation”>></span></span>
的标签,里面的值必须是个exe文件的相对或绝对路径,
我折腾过把里面的值设置为“D:\WSL\LxRunOffline.exe run -n centos”,可是这里面一有空格最后pycharm好像就会报错,或者pycharm在add python interpreter的WSL选项的界面里根本不显示你自定义的发行版的名字,
还折腾过把“LxRunOffline s -d”命令生成的快捷方式的路径放在上面那个<span class="token tag"><span class="token punctuation"><</span>executable-path<span class="token punctuation">></span></span>
标签里面,最后来来回回几遍都不行.
按照上面两种方式反反复复搞了一个下午都没能让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为例,执行下面的命令:
$ 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,然后找到里面的<span class=“token tag”><span class=“token punctuation”><</span>descriptor</span><span class=“token punctuation”>></span><span class=“token tag”><span class=“token punctuation”></</span>descriptor</span><span class=“token punctuation”>></span>
标签同级的地方,
我们以上面配置的CentOS7.exe为例,把下面的内容添加进去:
<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的,啥也不说了,直接上截图吧