Files
My-Blog/public/windows-5-py/index.html
2025-07-13 20:30:53 +08:00

438 lines
18 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en">
<head>
<title>Dich&#x27;blog</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1">
<meta name="robots" content="noodp"/>
<link rel="stylesheet" href="https://blog.dich.bid/style.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/blue.css">
<link rel="stylesheet" href="https://blog.dich.bid/color/background_dark.css">
<link rel="stylesheet" href="https://blog.dich.bid/font-hack-subset.css">
<meta name="description" content="">
<meta property="og:description" content="">
<meta property="og:title" content="Dich'blog">
<meta property="og:type" content="article">
<meta property="og:url" content="https://blog.dich.bid/windows-5-py/">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:description" content="">
<meta name="twitter:title" content="Dich'blog">
<meta property="twitter:domain" content="blog.dich.bid">
<meta property="twitter:url" content="https://blog.dich.bid/windows-5-py/">
<link rel="alternate" type="application/atom+xml" title="Dich&#x27;blog Atom Feed" href="https://blog.dich.bid/atom.xml" />
<link rel="icon" type="image/png" href=&#x2F;dich.webp />
<!-- ✅ Added center alignment styles -->
<style>
.footer {
text-align: center;
padding: 1rem 0;
}
.footer__inner {
display: flex;
justify-content: center;
flex-direction: column;
align-items: center;
}
.copyright {
text-align: center;
}
</style>
</head>
<body class="">
<div class="container">
<header class="header">
<div class="header__inner">
<div class="header__logo">
<a href="https://blog.dich.bid" style="text-decoration: none;">
<div class="logo">
Dich&#x27;blog
</div>
</a>
</div>
</div>
<nav class="menu">
<ul class="menu__inner">
<li class="active"><a href="https://blog.dich.bid">blog</a></li>
<li><a href="https://blog.dich.bid/archive">archive</a></li>
<li><a href="https://blog.dich.bid/tags">tags</a></li>
<li><a href="https://blog.dich.bid/weekly">weekly</a></li>
<li><a href="https://blog.dich.bid/search">search</a></li>
<li><a href="https://blog.dich.bid/about">about me</a></li>
<li><a href="https://blog.dich.bid/links">links</a></li>
<li><a href="https://blog.dich.bid/atom.xml">rss</a></li>
<li><a href="https://github.com/Dichgrem" target="_blank" rel="noopener noreferrer">github</a></li>
</ul>
</nav>
</header>
<div class="content">
<div class="post">
<h1 class="post-title"><a href="https://blog.dich.bid/windows-5-py/">Windows系列(5):Python开发配置</a></h1>
<div class="post-meta-inline">
<span class="post-date">
2024-05-31
</span>
</div>
<span class="post-tags-inline">
:: tags:&nbsp;
<a class="post-tag" href="https://blog.dich.bid/tags/windows/">#Windows</a></span>
<div class="post-content">
<p>前言 由于 Windows 中开发环境较 linux 复杂,这里总结 Windows 中使用 Jupyter 开发 Python 的环境配置。</p>
<span id="continue-reading"></span><h2 id="an-zhuang">安装</h2>
<p>Python是一种跨平台的编程语言,社区生态丰富,有许多现成的包可以调用。传统的安装方法如下:</p>
<ul>
<li>下载、安装Pythond解释器</li>
<li>验证安装;</li>
<li>安装VScode以及Python的拓展</li>
</ul>
<p>但Python开发项目时往往需要不同版本不同的第三方包如果用传统方法难以管理因此现在的主流方法是</p>
<ul>
<li>安装Anaconda或miniconda等Python集成包</li>
<li>使用conda创建并启动一个Python环境</li>
<li>安装jupyter编辑器编写python。</li>
</ul>
<p><a href="https://www.anaconda.com/">Anaconda官网</a>下载并安装,安装成功后,命令行中敲<code>conda info</code>会显示conda的版本和python的版本等详细信息再敲<code>conda list</code>,会列出当前环境下所有安装的包。</p>
<p>安装好了Anaconda就相当于同时有了Python、环境管理器、包管理器以及一大堆开箱即用的科学计算工具包。</p>
<h2 id="shi-yong">使用</h2>
<p>安装好了默认是在base虚拟环境下此时我们从base环境复制一份出来在新环境里工作。</p>
<ul>
<li>复制base环境, 创建test环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name test --clone base
</span></code></pre>
<ul>
<li>激活test环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda activate test
</span></code></pre>
<ul>
<li>取消Conda默认激活base虚拟环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda config --set auto_activate_base false
</span></code></pre>
<ul>
<li>列出本机的所有环境如下可见当前有2个环境当前激活的是test环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>(test) ➜ ~ conda info -e
</span><span>- conda environments:
</span><span>#
</span><span>base /Volumes/300g/opt/anaconda3
</span><span>test * /Volumes/300g/opt/anaconda3/envs/test
</span></code></pre>
<ul>
<li>Anaconda默认安装了jupyter打开jupyter</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>jupyter notebook
</span></code></pre>
<p>此时会自动弹出浏览器窗口打开Jupyter Notebook网页默认为<code>http://localhost:8888</code></p>
<blockquote>
<p>Jupyter汉化/下载中文包:<code>pip install jupyterlab-language-pack-zh-CN</code></p>
</blockquote>
<h3 id="xu-ni-huan-jing-guan-li">虚拟环境管理</h3>
<ul>
<li>创建环境后面的python=3.6是指定python的版本</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name env_name python=3.6
</span></code></pre>
<ul>
<li>创建包含某些包的环境(也可以加上版本信息)</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name env_name python=3.7 numpy scrapy
</span></code></pre>
<ul>
<li>激活某个环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda activate env_name
</span></code></pre>
<ul>
<li>关闭某个环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda deactivate
</span></code></pre>
<ul>
<li>复制某个环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda create --name new_env_name --clone old_env_name
</span></code></pre>
<ul>
<li>删除某个环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda remove --name env_name --all
</span></code></pre>
<ul>
<li>生成需要分享环境的yml文件需要在虚拟环境中执行</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda env export &gt; environment.yml
</span></code></pre>
<ul>
<li>别人在自己本地使用yml文件创建虚拟环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda env create -f environment.yml
</span></code></pre>
<h3 id="bao-guan-li">包管理</h3>
<ul>
<li>列出当前环境下所有安装的包</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda list
</span></code></pre>
<ul>
<li>列举一个指定环境下的所有包</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda list -n env_name
</span></code></pre>
<ul>
<li>查询库</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda search scrapys
</span></code></pre>
<ul>
<li>安装库安装时可以指定版本例如scrapy=1.5.0</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install scrapy
</span></code></pre>
<ul>
<li>为指定环境安装某个包</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install --name target_env_name package_name
</span></code></pre>
<ul>
<li>更新安装的库</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda update scrapy
</span></code></pre>
<ul>
<li>更新指定环境某个包</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda update -n target_env_name package_name
</span></code></pre>
<ul>
<li>更新所有包</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda update --all
</span></code></pre>
<ul>
<li>删除已经安装的库</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda remove scrapy
</span></code></pre>
<ul>
<li>删除指定环境某个包</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda remove -n target_env_name package_name
</span></code></pre>
<ul>
<li>更多命令请查看官方文档或者查询帮助命令:</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda --help
</span><span>
</span><span>conda install --help
</span></code></pre>
<p>有了Conda包管理器为什么Anaconda环境中可能还需要用pip安装包呢因为Anaconda本身只提供部分包远没有pip提供的包多有时conda无法安装我们需要的包此时需要用pip将其装到conda环境里。</p>
<p>安装特定版本的包conda用=pip用==。例如:</p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install xxx=1.0.0
</span><span>pip install xxx==1.0.0
</span></code></pre>
<h2 id="jupytershi-yong">Jupyter使用</h2>
<p>安装Anaconda并启动一个环境之后如何让Jupyter Notebook在我们要的环境中启动呢</p>
<ul>
<li>激活目标环境</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda activate myenv
</span></code></pre>
<ul>
<li>安装 ipykernel如尚未安装
为了让 Jupyter Notebook 能识别该环境中的 Python 解释器,你需要在该环境中安装 ipykernel</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>conda install ipykernel
</span><span>
</span><span># 或者使用 pip
</span><span>
</span><span>pip install ipykernel
</span></code></pre>
<ul>
<li>注册环境内核
将该环境注册为 Jupyter 的一个内核kernel这样启动 Jupyter Notebook 后就能选择这个内核:</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>python -m ipykernel install --user --name myenv --display-name &quot;Python (myenv)&quot;
</span><span>
</span><span># 这里 --name 指定内核的名称,--display-name 是在 Jupyter Notebook 界面中显示的名称,你可以根据需要自定义。
</span></code></pre>
<ul>
<li>启动 Jupyter Notebook依然在激活后的环境中启动 Jupyter Notebook</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>jupyter notebook
</span></code></pre>
<ul>
<li>启动后,你在新建 notebook 时可以选择刚刚注册的内核 “Python (myenv)” 来确保使用该环境的 Python 解释器。</li>
</ul>
<blockquote>
<p>当然,你也可以使用其他编辑器/IDE如 Sublime Text 或者 JetBrains 系列的 PyCharm 。</p>
</blockquote>
<blockquote>
<p>linux中使用Miniconda</p>
</blockquote>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span># Miniconda安装脚本
</span><span>wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
</span><span># 执行以下命令启动安装程序:
</span><span>bash Miniconda3-latest-Linux-x86_64.sh
</span><span># 验证安装
</span><span>conda --version
</span></code></pre>
<h2 id="shi-yong-uvti-dai-conda">使用UV替代Conda</h2>
<blockquote>
<p>UV由 Astral 团队开发)是一个用 Rust 编写的高性能包管理器,提供了类似 Conda 的虚拟环境管理和依赖解析功能,并且在大多数场景下比 pip 和 Conda 快 10100 倍。它通过命令行工具如 uv venv创建/管理虚拟环境)和 uv pip安装/锁定/同步依赖)来覆盖传统的 conda create、conda install、conda env export 等操作,但本身并不管理底层的 C/C++ 库,因此对于诸如 GDAL、SciPy 等需要系统级二进制依赖的包,仍建议在 Conda/系统包管理器中预装相关库,然后用 UV 来管理 Python 包。</p>
</blockquote>
<p><strong>安装与激活</strong></p>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>wget -qO- https://astral.sh/uv/install.sh | sh
</span></code></pre>
<ul>
<li>在当前目录下创建 .venv使用系统默认 Python若不存在则自动下载</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>uv venv
</span></code></pre>
<ul>
<li>指定环境名称或路径</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>uv venv myenv
</span></code></pre>
<ul>
<li>指定 Python 版本(需系统已有或可下载)</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>uv venv --python 3.11
</span></code></pre>
<ul>
<li>激活</li>
</ul>
<pre style="background-color:#151515;color:#e8e8d3;"><code><span>source .venv/bin/activate
</span></code></pre>
<p><strong>安装包</strong></p>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 安装单个包
</span><span style="color:#ffb964;">uv</span><span> pip install requests
</span><span>
</span><span style="color:#888888;"># 批量安装并自动锁定依赖
</span><span style="color:#ffb964;">uv</span><span> pip install fastapi uvicorn sqlalchemy
</span></code></pre>
<p><strong>生成与同步锁文件</strong></p>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#888888;"># 从 requirements.in 生成统一依赖文件
</span><span style="color:#ffb964;">uv</span><span> pip compile docs/requirements.in \
</span><span style="color:#ffb964;"> --universal </span><span>\
</span><span style="color:#ffb964;"> --output-file</span><span> docs/requirements.txt
</span><span>
</span><span style="color:#888888;"># 根据锁文件同步环境
</span><span style="color:#ffb964;">uv</span><span> pip sync docs/requirements.txt
</span></code></pre>
<p>此流程替代 <code>conda env export</code> + <code>conda env update</code>,并保证跨平台一致性 ([GitHub][3])。</p>
<p><strong>查看与卸载</strong></p>
<pre data-lang="bash" style="background-color:#151515;color:#e8e8d3;" class="language-bash "><code class="language-bash" data-lang="bash"><span style="color:#ffb964;">uv</span><span> pip list </span><span style="color:#888888;"># 列出已安装包(类似 conda list
</span><span style="color:#ffb964;">uv</span><span> pip uninstall numpy
</span></code></pre>
<p><strong>替代常见 Conda 工作流</strong></p>
<table><thead><tr><th>Conda 操作</th><th>UV 对应</th></tr></thead><tbody>
<tr><td><code>conda create -n env python=3.x</code></td><td><code>uv venv --python 3.x</code></td></tr>
<tr><td><code>conda activate env</code></td><td><code>source .venv/bin/activate</code><code>activate</code></td></tr>
<tr><td><code>conda install pkg1 pkg2</code></td><td><code>uv pip install pkg1 pkg2</code></td></tr>
<tr><td><code>conda env export &gt; env.yml</code></td><td><code>uv pip compile requirements.in</code></td></tr>
<tr><td><code>conda env update -f env.yml</code></td><td><code>uv pip sync requirements.txt</code></td></tr>
<tr><td><code>conda list</code></td><td><code>uv pip list</code></td></tr>
</tbody></table>
<p><strong>最佳实践</strong></p>
<ol>
<li><strong>系统依赖</strong>:用 Conda/Mamba 安装较难编译的 C 库(<code>conda install gdal</code>)。</li>
<li><strong>Python 包</strong>:用 UV 管理所有纯 Python 依赖(<code>uv pip install pandas scikit-learn</code>)。</li>
<li><strong>统一锁定</strong>:把 <code>uv pip compile</code> 生成的 <code>requirements.txt</code> 放入版本控制,确保团队环境一致。</li>
</ol>
<hr />
<p><strong>Done.</strong></p>
</div>
<div class="pagination">
<div class="pagination__title">
<span class="pagination__title-h">Thanks for reading! Read other posts?</span>
<hr />
</div>
<div class="pagination__buttons">
<span class="button previous">
<a href="https://blog.dich.bid/windows-6-c/">
<span class="button__icon"></span>&nbsp;
<span class="button__text">Windows系列(6):C&#x2F;C++开发配置</span>
</a>
</span>
<span class="button next">
<a href="https://blog.dich.bid/about-cslearning/">
<span class="button__text">乱七八糟:计算机科学优质视频</span>&nbsp;
<span class="button__icon"></span>
</a>
</span>
</div>
</div>
</div>
</div>
<footer class="footer">
<div class="footer__inner">
<div class="copyright">
<span>©
2025
Dichgrem</span>
<span class="copyright-theme">
<span class="copyright-theme-sep"> :: CC BY-SA 4.0 :: A friend comes from distant lands</span>
</a>
</span>
</div>
</div>
</footer>
</div>
</body>
</html>