新版ubuntu使用pip时发生的错误
<div id="article_content" class="article_content clearfix"><div id="content_views" class="htmledit_views">
<p>新版ubuntu使用pip时发生错误:</p>
<div>
<pre data-index="0" class="set-code-hide" name="code"><code class="language-bash hljs"><ol class="hljs-ln" style="width: 1954px"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">error: externally-managed-environment</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">× This environment is externally managed</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">╰─> To install Python packages system-wide, try apt install</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> python3-xyz, <span class="hljs-built_in">where</span> xyz is the package you are trying to</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> install.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> If you wish to install a non-Debian-packaged Python package,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> create a virtual environment using python3 -m venv path/to/venv.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> Then use path/to/venv/bin/python and path/to/venv/bin/pip. Make</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> sure you have python3-full installed.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> If you wish to install a non-Debian packaged Python application,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> it may be easiest to use pipx install xyz, <span class="hljs-built_in">which</span> will manage a</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> virtual environment <span class="hljs-keyword">for</span> you. Make sure you have pipx installed.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> See /usr/share/doc/python3.11/README.venv <span class="hljs-keyword">for</span> more information.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> </div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">hint: See PEP 668 <span class="hljs-keyword">for</span> the detailed specification.</div></div></li></ol></code><div class="hide-preCode-box"><span class="hide-preCode-bt"><img class="look-more-preCode contentImg-no-view lazyload" alt="" title="" data-src="https://csdnimg.cn/release/blogv2/dist/pc/img/newCodeMoreWhite.png"></span></div><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<p>收到一个错误提示:<code>error: externally-managed-environment</code>,即“外部管理环境”错误,但这不是一个 bug,新的发行版中,正在使用 Python 包来实现此增强功能,这个更新是为了避免操作系统包管理器 (如pacman、yum、apt) 和 pip 等特定于 Python 的包管理工具之间的冲突,这些冲突包括 Python 级 API 不兼容和文件所有权冲突。</p>
<p>可以看一下python官方的说明:<br><span class="link-card-box"><span class="link-title">PEP 668 – Python base environments Python 增强提案 (PEP)</span><span class="link-link"><img class="link-link-icon lazyload" alt="icon-default.png?t=N7T8" data-src="https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8">https://realpython.com/python-virtual-environments-a-primer/?ref=yaolong.net</span></span></p>
<h3>解决方案:</h3>
<h4><strong>1:如果你习惯于原来的用法可以强制删除此警告:</strong></h4>
<div>
<pre data-index="1" class="set-code-show" name="code"><code class="language-bash hljs">sudo <span class="hljs-built_in">mv</span> /usr/lib/python3.x/EXTERNALLY-MANAGED /usr/lib/python3.x/EXTERNALLY-MANAGED.bk</code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<div>
注意python版本号写你自己的别直接抄,不知道到底是多少可以进/user/lib看看:
</div>
<div>
<div>
<pre data-index="2" class="set-code-show" name="code"><code class="language-bash hljs">find /usr/lib/ -<span class="hljs-built_in">type</span> d -name <span class="hljs-string">"*python*"</span></code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<h4><strong>2:老实点使用pipx</strong></h4>
<p>安装pipx:</p>
<pre data-index="3" class="set-code-show" name="code"><code class="language-bash hljs">sudo apt install pipx</code><div class="hljs-button {2}" data-title="复制"></div></pre>
<p>以后就使用Pipx去安装包文件了:</p>
<div>
<pre data-index="4" class="set-code-show" name="code"><code class="language-bash hljs">pipx install package_name
</code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<p>添加环境变量:</p>
<pre data-index="5" class="set-code-show" name="code"><code class="language-bash hljs">pipx ensurepath</code><div class="hljs-button {2}" data-title="复制"></div></pre>
<p>删除使用pipx安装的软件包:</p>
<div>
<pre data-index="6" class="set-code-show" name="code"><code class="language-bash hljs">pipx uninstall package_name</code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<h4>3:使用venv</h4>
<p>如果你是专业开发人员,在运行或构建py文件时遇到<strong><code>“ModuleNotFoundError: No module named 'xxx'”</code></strong>错误,推荐使用Python虚拟环境,借助虚拟环境,使用不同版本的包依赖项和Python,避免包之间的任何冲突。</p>
<p>安装 venv:</p>
<div>
<pre data-index="7" class="set-code-show" name="code"><code class="language-bash hljs"><ol class="hljs-ln" style="width: 100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">sudo apt install python3-venv</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-comment">#或者</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line">sudo apt install python3.10-venv</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<p>生成Python虚拟环境:</p>
<div>
<pre data-index="8" class="set-code-show" name="code"><code class="language-bash hljs"><span class="hljs-built_in">mkdir</span> -p <span class="hljs-variable">$HOME</span>/.env && python3 -m venv <span class="hljs-variable">$HOME</span>/.env/project_name
</code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<p>将看到一个.env在主目录中,并且你将在 .env 中拥有项目目录,每个虚拟环境项目目录中都会有自己的 Python 和 Pip 副本。</p>
<p>安装模块:</p>
<div>
<pre data-index="9" class="set-code-show" name="code"><code class="language-bash hljs"><ol class="hljs-ln" style="width: 100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-variable">$HOME</span>/.env/project_name/bin/python -m pip install --upgrade pip</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-variable">$HOME</span>/.env/project_name/bin/python -m pip install package_name</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
<p>用新的虚拟环境执行py文件:</p>
<div>
<pre data-index="10" class="set-code-show" name="code"><code class="language-bash hljs"><ol class="hljs-ln" style="width: 100%"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-built_in">source</span> <span class="hljs-variable">$HOME</span>/.env/project_name/bin/activate</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"><span class="hljs-variable">$HOME</span>/.env/project_name/bin/python ./xxxx.py</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制"></div></pre>
</div>
</div>
<div></div>
</div><div><div></div></div>
</div><br><br>
来源:https://www.cnblogs.com/clark1990/p/17942952
頁:
[1]