<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Python on 夜云泊</title>
    <link>https://lifeislife.cn/tags/python/</link>
    <description>feedId:57980998056508425+userId:73222296380546048 Recent content in Python on 夜云泊</description>
    <generator>Hugo -- 0.163.1</generator>
    <language>zh</language>
    <lastBuildDate>Mon, 12 Sep 2022 14:05:17 +0000</lastBuildDate>
    <atom:link href="https://lifeislife.cn/tags/python/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Linux 下切换 Python 版本</title>
      <link>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3linux%E4%B8%8B%E5%88%87%E6%8D%A2python%E7%89%88%E6%9C%AC/</link>
      <pubDate>Mon, 12 Sep 2022 14:05:17 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3linux%E4%B8%8B%E5%88%87%E6%8D%A2python%E7%89%88%E6%9C%AC/</guid>
      <description>&lt;h2 id=&#34;需求背景&#34;&gt;需求背景&lt;/h2&gt;
&lt;p&gt;用过 Python 的都知道，Python 是不向后兼容的，也就是 Python3.X 开发的程序，使用 Python2.X 环境就无法正常运行。因为很多语法都改变了。现在接触到的大部分 Python 程序都是 Python3.X 开发的，但是偶尔也会遇到使用 Python2.X 的时候。这就需要灵活切换版本。&lt;/p&gt;
&lt;p&gt;一般 Linux 的各个发行版都预装了 Python2.X。我使用的 Debian 就预装了 Python2.7。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 2.7.16
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;但是我同时也安装了 Python3.7&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ls /usr/bin &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;python*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;dh_python2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python2.7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3.7
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3.7m
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python3m
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;alias-修改别名&#34;&gt;alias 修改别名&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ &lt;span class=&#34;nb&#34;&gt;alias&lt;/span&gt; &lt;span class=&#34;nv&#34;&gt;python&lt;/span&gt;&lt;span class=&#34;o&#34;&gt;=&lt;/span&gt;/usr/bin/python3
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 3.7.3  
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;上面的别名修改只对当前终端有效。如果要使每个窗口都使用这个别名，将别名加入&lt;code&gt;~/.bashrc&lt;/code&gt;，如 zsh 是则是&lt;code&gt;~/.zshrc&lt;/code&gt;。&lt;/p&gt;
&lt;h2 id=&#34;软链接&#34;&gt;软链接&lt;/h2&gt;
&lt;p&gt;和修改别名类似&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ln -s python /usr/bin/python3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;update-alternatives&#34;&gt;update-alternatives&lt;/h2&gt;
&lt;p&gt;&lt;code&gt;update-alternatives&lt;/code&gt;是 Debian 系统提供的一个工具，Ubuntu 是基于 Debian 的，所以 Ubuntu 也可以使用，其他发行版没有该工具。它可以用来方便快捷地切换应用版本，不仅仅用来切换 Python，其他应用程序有多个版本的也可以使用该工具。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;update-alternatives&lt;/code&gt;本质也是建立软链接，只不过有了统一的管理，首先我们需要使用&lt;code&gt;--install&lt;/code&gt;参数，添加一些候选项，也就是执行&lt;code&gt;python&lt;/code&gt;这个命令时，它可以有哪些选择，在这里就是&lt;code&gt;python3.7.3&lt;/code&gt;和&lt;code&gt;python2.7.16&lt;/code&gt;两个选择。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;c1&#34;&gt;# --install &amp;lt;链接&amp;gt; &amp;lt;名称&amp;gt; &amp;lt;路径&amp;gt; &amp;lt;优先级&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;注意&lt;/strong&gt;，这里的&lt;code&gt;/usr/bin/python&lt;/code&gt;链接文件，两个可选项必须是一样的，这样这个链接文件才可以选择两个不同的可选项去链接。&lt;/p&gt;
&lt;p&gt;&lt;code&gt;python&lt;/code&gt;是在命令行执行的命令。&lt;code&gt;/usr/bin/python2.7&lt;/code&gt;是执行&lt;code&gt;python&lt;/code&gt;命令后调用具体哪个版本。最后的数字&lt;code&gt;2&lt;/code&gt;是优先级，也就是&lt;code&gt;python2.7&lt;/code&gt;比&lt;code&gt;python3.7&lt;/code&gt;优先级高，如果不指定版本，那么默认就是使用&lt;code&gt;python2&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;我们再查看一下版本信息，发现是&lt;code&gt;python2.7.16&lt;/code&gt;。说明是默认版本。并且&lt;code&gt;python&lt;/code&gt;已被链接到我们管理的软链接上。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 2.7.16
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ ll /usr/bin  &lt;span class=&#34;p&#34;&gt;|&lt;/span&gt; grep &lt;span class=&#34;s2&#34;&gt;&amp;#34;python&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;lrwxrwxrwx &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; root   python -&amp;gt; /etc/alternatives/python
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;查看&lt;code&gt;python&lt;/code&gt;的可选配置，可以看到有两个可选配置，默认是&lt;code&gt;python2&lt;/code&gt;，第一列是序号，如果我们想切换到&lt;code&gt;python3&lt;/code&gt;，对应的数字&lt;code&gt;2&lt;/code&gt;即可。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;root at RISCX in ~
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ update-alternatives --config python
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;There are &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt; choices &lt;span class=&#34;k&#34;&gt;for&lt;/span&gt; the alternative python &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;providing /usr/bin/python&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;.
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  Selection    Path                Priority   Status
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;------------------------------------------------------------
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;* &lt;span class=&#34;m&#34;&gt;0&lt;/span&gt;            /usr/bin/python2.7   &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;         auto mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;            /usr/bin/python2.7   &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;         manual mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;  &lt;span class=&#34;m&#34;&gt;2&lt;/span&gt;            /usr/bin/python3.7   &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt;         manual mode
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Press &amp;lt;enter&amp;gt; to keep the current choice&lt;span class=&#34;o&#34;&gt;[&lt;/span&gt;*&lt;span class=&#34;o&#34;&gt;]&lt;/span&gt;, or &lt;span class=&#34;nb&#34;&gt;type&lt;/span&gt; selection number:2
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;update-alternatives: using /usr/bin/python3.7 to provide /usr/bin/python &lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;python&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt; in manual mode
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;再次查看版本信息，发现已经切换成功。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;$ python -V
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Python 3.7.3
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;执行&lt;code&gt;update-alternatives&lt;/code&gt;经常会导致我的终端&lt;strong&gt;回车失效&lt;/strong&gt;，可以参考&lt;a href=&#34;https://dunky-z.github.io/2022/09/12/%E8%A7%A3%E5%86%B3Linux%E7%BB%88%E7%AB%AF%E5%9B%9E%E8%BD%A6%E9%94%AE%E5%8F%98%E6%88%90%E5%AD%97%E7%AC%A6M/&#34;&gt;解决 Linux 终端回车键变成字符 M&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;code&gt;--remove&lt;/code&gt;，删除可选项：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;sudo update-alternatives --remove python /usr/bin/python2.7
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<h2 id="需求背景">需求背景</h2>
<p>用过 Python 的都知道，Python 是不向后兼容的，也就是 Python3.X 开发的程序，使用 Python2.X 环境就无法正常运行。因为很多语法都改变了。现在接触到的大部分 Python 程序都是 Python3.X 开发的，但是偶尔也会遇到使用 Python2.X 的时候。这就需要灵活切换版本。</p>
<p>一般 Linux 的各个发行版都预装了 Python2.X。我使用的 Debian 就预装了 Python2.7。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 2.7.16
</span></span></code></pre></div><p>但是我同时也安装了 Python3.7</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ ls /usr/bin <span class="p">|</span> grep <span class="s2">&#34;python*&#34;</span>
</span></span><span class="line"><span class="cl">dh_python2
</span></span><span class="line"><span class="cl">python
</span></span><span class="line"><span class="cl">python2
</span></span><span class="line"><span class="cl">python2.7
</span></span><span class="line"><span class="cl">python3
</span></span><span class="line"><span class="cl">python3.7
</span></span><span class="line"><span class="cl">python3.7m
</span></span><span class="line"><span class="cl">python3m
</span></span></code></pre></div><h2 id="alias-修改别名">alias 修改别名</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ <span class="nb">alias</span> <span class="nv">python</span><span class="o">=</span>/usr/bin/python3
</span></span><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 3.7.3  
</span></span></code></pre></div><p>上面的别名修改只对当前终端有效。如果要使每个窗口都使用这个别名，将别名加入<code>~/.bashrc</code>，如 zsh 是则是<code>~/.zshrc</code>。</p>
<h2 id="软链接">软链接</h2>
<p>和修改别名类似</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ln -s python /usr/bin/python3
</span></span></code></pre></div><h2 id="update-alternatives">update-alternatives</h2>
<p><code>update-alternatives</code>是 Debian 系统提供的一个工具，Ubuntu 是基于 Debian 的，所以 Ubuntu 也可以使用，其他发行版没有该工具。它可以用来方便快捷地切换应用版本，不仅仅用来切换 Python，其他应用程序有多个版本的也可以使用该工具。</p>
<p><code>update-alternatives</code>本质也是建立软链接，只不过有了统一的管理，首先我们需要使用<code>--install</code>参数，添加一些候选项，也就是执行<code>python</code>这个命令时，它可以有哪些选择，在这里就是<code>python3.7.3</code>和<code>python2.7.16</code>两个选择。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl"><span class="c1"># --install &lt;链接&gt; &lt;名称&gt; &lt;路径&gt; &lt;优先级&gt;</span>
</span></span><span class="line"><span class="cl">sudo update-alternatives --install /usr/bin/python python /usr/bin/python2.7 <span class="m">2</span>
</span></span><span class="line"><span class="cl">sudo update-alternatives --install /usr/bin/python python /usr/bin/python3.7 <span class="m">1</span>
</span></span></code></pre></div><p><strong>注意</strong>，这里的<code>/usr/bin/python</code>链接文件，两个可选项必须是一样的，这样这个链接文件才可以选择两个不同的可选项去链接。</p>
<p><code>python</code>是在命令行执行的命令。<code>/usr/bin/python2.7</code>是执行<code>python</code>命令后调用具体哪个版本。最后的数字<code>2</code>是优先级，也就是<code>python2.7</code>比<code>python3.7</code>优先级高，如果不指定版本，那么默认就是使用<code>python2</code>。</p>
<p>我们再查看一下版本信息，发现是<code>python2.7.16</code>。说明是默认版本。并且<code>python</code>已被链接到我们管理的软链接上。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 2.7.16
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">$ ll /usr/bin  <span class="p">|</span> grep <span class="s2">&#34;python&#34;</span>
</span></span><span class="line"><span class="cl">lrwxrwxrwx <span class="m">1</span> root   python -&gt; /etc/alternatives/python
</span></span></code></pre></div><p>查看<code>python</code>的可选配置，可以看到有两个可选配置，默认是<code>python2</code>，第一列是序号，如果我们想切换到<code>python3</code>，对应的数字<code>2</code>即可。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">root at RISCX in ~
</span></span><span class="line"><span class="cl">$ update-alternatives --config python
</span></span><span class="line"><span class="cl">There are <span class="m">2</span> choices <span class="k">for</span> the alternative python <span class="o">(</span>providing /usr/bin/python<span class="o">)</span>.
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">  Selection    Path                Priority   Status
</span></span><span class="line"><span class="cl">------------------------------------------------------------
</span></span><span class="line"><span class="cl">* <span class="m">0</span>            /usr/bin/python2.7   <span class="m">2</span>         auto mode
</span></span><span class="line"><span class="cl">  <span class="m">1</span>            /usr/bin/python2.7   <span class="m">2</span>         manual mode
</span></span><span class="line"><span class="cl">  <span class="m">2</span>            /usr/bin/python3.7   <span class="m">1</span>         manual mode
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Press &lt;enter&gt; to keep the current choice<span class="o">[</span>*<span class="o">]</span>, or <span class="nb">type</span> selection number:2
</span></span><span class="line"><span class="cl">update-alternatives: using /usr/bin/python3.7 to provide /usr/bin/python <span class="o">(</span>python<span class="o">)</span> in manual mode
</span></span></code></pre></div><p>再次查看版本信息，发现已经切换成功。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">$ python -V
</span></span><span class="line"><span class="cl">Python 3.7.3
</span></span></code></pre></div><blockquote>
<p>执行<code>update-alternatives</code>经常会导致我的终端<strong>回车失效</strong>，可以参考<a href="https://dunky-z.github.io/2022/09/12/%E8%A7%A3%E5%86%B3Linux%E7%BB%88%E7%AB%AF%E5%9B%9E%E8%BD%A6%E9%94%AE%E5%8F%98%E6%88%90%E5%AD%97%E7%AC%A6M/">解决 Linux 终端回车键变成字符 M</a></p>
</blockquote>
<p><code>--remove</code>，删除可选项：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">sudo update-alternatives --remove python /usr/bin/python2.7
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>解决 Python No module named &#39;ConfigParser&#39;</title>
      <link>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3python-no-module-named-configparser/</link>
      <pubDate>Sun, 11 Sep 2022 23:20:05 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3python-no-module-named-configparser/</guid>
      <description>&lt;h2 id=&#34;保留现场&#34;&gt;保留现场&lt;/h2&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;ImportError: No module named &lt;span class=&#34;s1&#34;&gt;&amp;#39;ConfigParser&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;Command &lt;span class=&#34;s2&#34;&gt;&amp;#34;python setup.py egg_info&amp;#34;&lt;/span&gt; failed with error code &lt;span class=&#34;m&#34;&gt;1&lt;/span&gt; in
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;解决方法&#34;&gt;解决方法&lt;/h2&gt;
&lt;p&gt;在 Python 3.x 版本后，&lt;code&gt;ConfigParser.py&lt;/code&gt; 已经更名为 &lt;code&gt;configparser.py&lt;/code&gt; 所以出错！&lt;/p&gt;
&lt;p&gt;可以切换 Python2 执行。&lt;/p&gt;
&lt;p&gt;也可以尝试将文件重命名为&lt;code&gt;ConfigParser.py&lt;/code&gt;。&lt;/p&gt;
&lt;p&gt;以下为参考，每个人安装路径可能不一样，可以全局搜索&lt;code&gt;configparser.py&lt;/code&gt;。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;cp /usr/lib/python3.7/configparser.py /usr/lib/python3.7/ConfigParser.py
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<h2 id="保留现场">保留现场</h2>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">ImportError: No module named <span class="s1">&#39;ConfigParser&#39;</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl">Command <span class="s2">&#34;python setup.py egg_info&#34;</span> failed with error code <span class="m">1</span> in
</span></span></code></pre></div><h2 id="解决方法">解决方法</h2>
<p>在 Python 3.x 版本后，<code>ConfigParser.py</code> 已经更名为 <code>configparser.py</code> 所以出错！</p>
<p>可以切换 Python2 执行。</p>
<p>也可以尝试将文件重命名为<code>ConfigParser.py</code>。</p>
<p>以下为参考，每个人安装路径可能不一样，可以全局搜索<code>configparser.py</code>。</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">cp /usr/lib/python3.7/configparser.py /usr/lib/python3.7/ConfigParser.py
</span></span></code></pre></div>]]></content:encoded>
    </item>
    <item>
      <title>解决 No module named &#39;ConfigParser&#39;</title>
      <link>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3no-module-named-configparser/</link>
      <pubDate>Mon, 05 Sep 2022 15:43:20 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/%E8%A7%A3%E5%86%B3no-module-named-configparser/</guid>
      <description></description>
    </item>
    <item>
      <title>Linux 切换不同 Python 版本</title>
      <link>https://lifeislife.cn/posts/linux%E5%88%87%E6%8D%A2%E4%B8%8D%E5%90%8Cpython%E7%89%88%E6%9C%AC/</link>
      <pubDate>Mon, 05 Sep 2022 15:31:27 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/linux%E5%88%87%E6%8D%A2%E4%B8%8D%E5%90%8Cpython%E7%89%88%E6%9C%AC/</guid>
      <description></description>
    </item>
    <item>
      <title>多版本 Python 使用 pip 安装 package 问题</title>
      <link>https://lifeislife.cn/posts/%E5%A4%9A%E7%89%88%E6%9C%ACpython%E4%BD%BF%E7%94%A8pip%E5%AE%89%E8%A3%85package%E9%97%AE%E9%A2%98/</link>
      <pubDate>Sat, 27 Aug 2022 15:30:58 +0000</pubDate>
      <guid>https://lifeislife.cn/posts/%E5%A4%9A%E7%89%88%E6%9C%ACpython%E4%BD%BF%E7%94%A8pip%E5%AE%89%E8%A3%85package%E9%97%AE%E9%A2%98/</guid>
      <description>&lt;h2 id=&#34;最简单的方式&#34;&gt;最简单的方式&lt;/h2&gt;
&lt;p&gt;使用参数指定安装路径：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -t D:&lt;span class=&#34;se&#34;&gt;\p&lt;/span&gt;ython3.5&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;32bit&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\L&lt;/span&gt;ib&lt;span class=&#34;se&#34;&gt;\s&lt;/span&gt;ite-packages numpy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;叨叨叨&#34;&gt;叨叨叨&lt;/h2&gt;
&lt;p&gt;如果电脑上安装了多个版本的&lt;code&gt;Python&lt;/code&gt;的话，在需要使用&lt;code&gt;pip&lt;/code&gt;安装新&lt;code&gt;package&lt;/code&gt;时，就会遇到这个问题：我把&lt;code&gt;package&lt;/code&gt;安装到哪了？&lt;/p&gt;
&lt;p&gt;因为每个版本的 Python 是有自己独立的&lt;code&gt;pip&lt;/code&gt;，也有独立的&lt;code&gt;lib&lt;/code&gt;目录的，管理的包也各不同。一般来说，使用默认的&lt;code&gt;pip&lt;/code&gt;命令安装的位置，就是默认的&lt;code&gt;python&lt;/code&gt;位置。&lt;/p&gt;
&lt;p&gt;比如我在终端敲下&lt;code&gt;python&lt;/code&gt;，使用的是&lt;code&gt;python3.6&lt;/code&gt;那么安装的&lt;code&gt;package&lt;/code&gt;就会在&lt;code&gt;C:\Python36\Lib\site-packages&lt;/code&gt;（根据自己安装 Python 的路径稍有区别）。&lt;/p&gt;
&lt;h2 id=&#34;情景一安装的都是-python3x-版本&#34;&gt;情景一：安装的都是 Python3.x 版本&lt;/h2&gt;
&lt;p&gt;有时候会遇到这样的需求，我准备跑的项目只能用&lt;code&gt;python3.8&lt;/code&gt;，我得把&lt;code&gt;package&lt;/code&gt;安装到&lt;code&gt;python38&lt;/code&gt;里，怎么办？&lt;/p&gt;
&lt;h3 id=&#34;方法-1&#34;&gt;方法 1&lt;/h3&gt;
&lt;p&gt;把其中一个&lt;code&gt;python&lt;/code&gt;环境变量删掉，留下（如果没有需要添加）&lt;code&gt;python38&lt;/code&gt;的路径和&lt;code&gt;script&lt;/code&gt;添加到环境变量。&lt;/p&gt;
&lt;p&gt;

&lt;!DOCTYPE html&gt;
&lt;html lang=&#34;en&#34;&gt;
&lt;head&gt;
    &lt;meta charset=&#34;UTF-8&#34;&gt;
    &lt;meta name=&#34;viewport&#34; content=&#34;width=device-width, initial-scale=1.0&#34;&gt;
    &lt;title&gt;Responsive Image&lt;/title&gt;
    &lt;style&gt;
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    
    &lt;div class=&#34;post-img-view&#34;&gt;
        &lt;a data-fancybox=&#34;gallery&#34; href=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/27/19-54-23-815dcfa312c91b1a3d139d9c14835473-20220827195423-3636bf.png&#34;&gt;
            &lt;img class=&#34;responsive-image&#34; src=&#34;https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/27/19-54-23-815dcfa312c91b1a3d139d9c14835473-20220827195423-3636bf.png&#34; alt=&#34;&#34;  style=&#34;margin: 0 auto;&#34;/&gt;
        &lt;/a&gt;
    &lt;/div&gt;
    

    &lt;script&gt;
        document.addEventListener(&#34;DOMContentLoaded&#34;, function() {
            var images = document.querySelectorAll(&#34;.responsive-image&#34;);
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + &#34;px&#34;;
            });
        });
    &lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;&lt;/p&gt;
&lt;p&gt;使用以下命令安装：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;python -m pip install xxxxx
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;因为默认&lt;code&gt;Python&lt;/code&gt;已经被修改为&lt;code&gt;python38&lt;/code&gt;。&lt;/p&gt;
&lt;h3 id=&#34;方法-2&#34;&gt;方法 2&lt;/h3&gt;
&lt;p&gt;使用文章开头的方式，最方便，直接指定 python 全局路径&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;pip install -t D:&lt;span class=&#34;se&#34;&gt;\p&lt;/span&gt;ython3.5&lt;span class=&#34;o&#34;&gt;(&lt;/span&gt;32bit&lt;span class=&#34;o&#34;&gt;)&lt;/span&gt;&lt;span class=&#34;se&#34;&gt;\L&lt;/span&gt;ib&lt;span class=&#34;se&#34;&gt;\s&lt;/span&gt;ite-packages numpy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id=&#34;情景二安装-python2x-与-python3x&#34;&gt;情景二：安装 Python2.x 与 Python3.x&lt;/h2&gt;
&lt;p&gt;Python3.x 使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;py -3 -m pip install numpy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Python2.x 使用：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-bash&#34; data-lang=&#34;bash&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;py -2 -m pip install numpy
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
      <content:encoded><![CDATA[<h2 id="最简单的方式">最简单的方式</h2>
<p>使用参数指定安装路径：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install -t D:<span class="se">\p</span>ython3.5<span class="o">(</span>32bit<span class="o">)</span><span class="se">\L</span>ib<span class="se">\s</span>ite-packages numpy
</span></span></code></pre></div><h2 id="叨叨叨">叨叨叨</h2>
<p>如果电脑上安装了多个版本的<code>Python</code>的话，在需要使用<code>pip</code>安装新<code>package</code>时，就会遇到这个问题：我把<code>package</code>安装到哪了？</p>
<p>因为每个版本的 Python 是有自己独立的<code>pip</code>，也有独立的<code>lib</code>目录的，管理的包也各不同。一般来说，使用默认的<code>pip</code>命令安装的位置，就是默认的<code>python</code>位置。</p>
<p>比如我在终端敲下<code>python</code>，使用的是<code>python3.6</code>那么安装的<code>package</code>就会在<code>C:\Python36\Lib\site-packages</code>（根据自己安装 Python 的路径稍有区别）。</p>
<h2 id="情景一安装的都是-python3x-版本">情景一：安装的都是 Python3.x 版本</h2>
<p>有时候会遇到这样的需求，我准备跑的项目只能用<code>python3.8</code>，我得把<code>package</code>安装到<code>python38</code>里，怎么办？</p>
<h3 id="方法-1">方法 1</h3>
<p>把其中一个<code>python</code>环境变量删掉，留下（如果没有需要添加）<code>python38</code>的路径和<code>script</code>添加到环境变量。</p>
<p>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Responsive Image</title>
    <style>
        .post-img-view {
            text-align: center;
        }
        .responsive-image {
            display: block;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    
    <div class="post-img-view">
        <a data-fancybox="gallery" href="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/27/19-54-23-815dcfa312c91b1a3d139d9c14835473-20220827195423-3636bf.png">
            <img class="responsive-image" src="https://picbed-1311007548.cos.ap-shanghai.myqcloud.com/markdown_picbed/img//2022/08/27/19-54-23-815dcfa312c91b1a3d139d9c14835473-20220827195423-3636bf.png" alt=""  style="margin: 0 auto;"/>
        </a>
    </div>
    

    <script>
        document.addEventListener("DOMContentLoaded", function() {
            var images = document.querySelectorAll(".responsive-image");
            var maxHeight = window.innerHeight / 3;
            images.forEach(function(image) {
                image.style.maxHeight = maxHeight + "px";
            });
        });
    </script>
</body>
</html></p>
<p>使用以下命令安装：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">python -m pip install xxxxx
</span></span></code></pre></div><p>因为默认<code>Python</code>已经被修改为<code>python38</code>。</p>
<h3 id="方法-2">方法 2</h3>
<p>使用文章开头的方式，最方便，直接指定 python 全局路径</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">pip install -t D:<span class="se">\p</span>ython3.5<span class="o">(</span>32bit<span class="o">)</span><span class="se">\L</span>ib<span class="se">\s</span>ite-packages numpy
</span></span></code></pre></div><h2 id="情景二安装-python2x-与-python3x">情景二：安装 Python2.x 与 Python3.x</h2>
<p>Python3.x 使用：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">py -3 -m pip install numpy
</span></span></code></pre></div><p>Python2.x 使用：</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-bash" data-lang="bash"><span class="line"><span class="cl">py -2 -m pip install numpy
</span></span></code></pre></div>]]></content:encoded>
    </item>
  </channel>
</rss>
