共计 2650 个字符,预计需要花费 7 分钟才能阅读完成。
背景
最近在 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 自定义发行版的配置中有个 <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 为例,执行下面的命令:
$ 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 为例,把下面的内容添加进去:
<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 的,啥也不说了,直接上截图吧