背景

最近在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文件的相对或绝对路径,

全网首发如何把Pycharm远程解释器设置为WSL2 CentOS里面的python</a />

我折腾过把里面的值设置为“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的,啥也不说了,直接上截图吧

全网首发如何把Pycharm远程解释器设置为WSL2 CentOS里面的python</a />