WinPython简介
WinPython是一个免费的、开源的、可移植的Python编程语言的发行版,适用于windows 8/10以及科学和教育用途。
它是一个功能齐全的基于Python的科学环境:
- 专为科学家、数据科学家和教育设计 (thanks to NumPy, SciPy, Sympy, Matplotlib, Pandas, pyqtgraph, etc.)
- 使用Python与Spyder和Jupyter/IPython、Pyzo、IDLEX或IDLE进行交互式数据处理和可视化
- 完全集成的Cython和Numba
- 高级用户的连接器(cffi、odbc、rpy2、scilab2py、请求等)
- 便携式
- 在任何内存为2GB的Windows 8+上运行(Jupyter笔记本需要最新的浏览器)
- 使用大多数应用程序设置,可以将WinPython文件夹移动到任何位置(**)(本地、网络、USB驱动器)
- 灵活性
- 您可以在同一台机器上安装任意多个WinPython发行版:每个发行版都是独立的和自一致的
- 这些安装可以是不同版本的Python(7/3.8/3.9…)
- 可定制
- 集成的WinPython包管理器(WPPM)帮助安装、卸载或升级Python包
- 也可以从WinPython命令提示符使用pip安装或升级包
- 配置文件允许您在运行时设置环境变量
WinPython与其他Python发行版有所不同:
- 非侵入性:WinPython完全位于自己的目录中,完全是一个绿色软件
- 可定制:添加需要但未安装的包,压缩WinPython目录并将其交给
- 做你自己的版本:为你提供了一个WinPython创建工具
一个完整的WinPython可包含以下组件:
Anaconda简介
从字面意思看,anaconda是一种比python更大的蟒蛇。它作为程序包的名字,也就意味着 Anaconda包含了 Python以及其它的东西。事实上,Anaconda是一个适用于科学计算的Python集成开发环境。它有免费版和付费版之分,并有一个极小化版本Miniconda。使用Anaconda做为科学计算的开发环境,主要的优势在于安装各种程序库非常容易。
这一方面得益于 Continuum 公司在整合基础Python库方面作出的努力,另一方面也是因为各个开发者对于自己程序库的精心维护。这些努力使得Anaconda的用户将不必担心自己代码的可移植性问题,而将全部精力投入在正确性和执行效率上。而这正是科学计算领域绝大多数的从业者需要的。
Anaconda个人版本是完全免费的,Miniconda是Anaconda的极小化版本,它保持了Anaconda的易用性,但预装库更少,其它部件,比如集成开发环境也没有附带,更适合于 headless的使用场景。如果所需的库都已经安装齐备,那么在Anaconda环境下开发的Python程序应该可以直接在Miniconda环境下执行。
- 安装了Anaconda,你就拥有了任意版本的python和各种包了。
- 使用Anaconda,在同一个系统上维护不同的项目环境也很方便。
对于用户而言,使用Anaconda开发环境编写的Python程序很容易达到可移植性的基本要求,即与操作系统无关,因为安装每个所需要的库,都不依赖于操作系统;而Python语言本身是操作系统无关的(其实细节已经被开发者隐藏了)。对于开发者而言,这种可移植性可以被继承下去,因为开发的初始环境本身已经具有可移植性。
下载链接:Anaconda官网或清华镜像站
Anadconda的配置
1.添加环境变量到PATH,类似:
D:\ProgramData\Anaconda3 D:\ProgramData\Anaconda3\Scripts D:\ProgramData\Anaconda3\Library\bin
2.修改JupyterLab的默认工作目录
PS C:\Users\biaod>jupyter lab --generate-config Writing default config to: C:\Users\biaod\.jupyter\jupyter_lab_config.py #取消文件中的注释,并修改未你需要的路径。 c.ServerApp.notebook_dir = 'D:\ProgramData\JupyterLab'
Jupyerlab无法切换虚拟环境问题
在Windows中安装了Anaconda,由于某些包最新只支持Python 3.8,所以需要使用特定的版本。
正常的流程是:
conda create -n python38 python=3.8 conda activate python38
但在命令行中没有任何效果。网上找了下,原因是Windows 10开始默认使用PowerShell命令行工具导致的。只需执行如下命令即可:
conda install -n root -c pscondaenvs pscondaenvs Set-ExecutionPolicy RemoteSigned
如何在JupyterLab中把ipykernel切换到不同的conda虚拟环境?
在base环境中,输入:
(base) conda install ipykernel (base) conda install nb_conda_kernels
就安装了一个自动化的工具,实现ipython kernel install的功能。以后,新建的虚拟环境中只要安装了ipykernel,该环境的Jupyter kernel就会自动新建。
例如,新建一个名为”python38″的虚拟环境,新建环境时安装ipykernel。
(base) conda create -n python38 python=3.8 ipykernel
然后就不用管了,test环境的python38会自动生成。
包管理工具conda
Anaconda利用工具/命令 conda 来进行 package 和 environment 的管理,并且已经包含了 Python 和相关的配套工具。这里先解释下 conda、anaconda 这些概念的差别。conda 可以理解为一个工具,也是一个可执行命令,其核心功能是包管理与环境管理。包管理与 pip 的使用类似,环境管理则允许用户方便地安装不同版本的 python 并可以快速切换。
升级
升级 Anaconda 需要先升级 conda
conda update conda conda update anaconda conda update anaconda-navigator #最新版本的 anaconda-navigator
3、Could not determine jupyter lab build status without nodejs
解决方案:conda install -c conda-forge nodejs基本命令
conda --version #查看 conda 版本 conda update -n base conda #update 最新版本的 conda conda create -n xxxx #创建名为 xxxx 的虚拟环境 conda create -n xxxx python=3.5 #创建包含 python 3.5 的名为 xxxx 的虚拟环境 conda remove -n xxxx --all #删除名为 xxxx 的虚拟环境 conda activate xxxx #进入 xxxx 环境 source activate xxxx conda deactivate #退出环境 source activate conda env list #显示所有的虚拟环境 conda info --envs #查看当前环境 conda clean -p #删除没有用的包 conda clean -t #tar 打包 conda clean -y --all #删除所有的安装包及 cache
对包的操作
conda list #查看所有已经安装的包 conda list -n xxxx #指定查看 xxxx 虚拟环境下安装的 package conda install -n xxxx xxx #在指定环境中安装 xxx 包 conda update xxx #更新包 xxx conda uninstall xxx #卸载包 xxx
查看是否生效
conda info
包管理工具 pip
基本命令
pip --version #查看版本 pip --help #获取帮助 pip install -U pip #升级 pip pip install pkg #安装包 pip install pkg=version #安装指定版本的包 pip install --upgrade pkg #升级包 pip uninstall pkg #卸载包 pip search pkg #搜索包 pip show #显示安装包信息 pip show -f pkg #查看指定包的详细信息 pip list #列出已安装的包 pip list -o #查看可升级的包
升级
pip install --upgrade pip #Linux、Mac python -m pip install -U pip #windows
conda 与 pip 比较
- 依赖项检查
- pip:不一定会展示所需其他依赖包。安装包时或许会直接忽略依赖项而安装,仅在结果中提示错误。
- conda:列出所需其他依赖包。安装包时会检查系统环境,自动安装其依赖项。可以便捷地在包的不同版本中自由切换。
- 环境管理
- pip:维护多个环境难度较大。
- conda:比较方便地在不同环境之间进行切换,环境管理较为简单。
- 对系统自带 Python 的影响
- pip:在系统自带 Python 中包的**更新/回退版本/卸载将影响其他程序。
- conda:不会影响系统自带 Python。
- 适用语言
- pip:仅适用于 Python。
- conda:适用于 Python, R, Ruby, Lua, Scala, Java, JavaScript, C/C++, FORTRAN。
其他请看:conda 和 pip 的源配置方法
pip-tools
pip-tools 是一个用于管理 Python 项目依赖的工具集,它主要由两个命令行工具组成:pip-compile 和 pip-sync。这些工具帮助开发者更好地管理 Python 项目的依赖包及其版本,确保项目的可重复性和稳定性。
其主要使用场景包括以下几个方面:
- 确保依赖的可重复性:在软件开发中,不同的开发环境可能会导致安装的依赖版本不一致,进而导致“在我机器上可以正常工作”的问题。通过使用 pip-tools,可以锁定项目所需的所有依赖及其具体版本,从而确保在不同环境中安装的依赖是一致的。
- 简化依赖管理:在大型项目中,手动管理所有直接和间接依赖可能会非常复杂。pip-tools 的 pip-compile 工具自动解析所有依赖关系并生成一个锁定的 txt 文件,简化了这个过程。
- 升级依赖:当需要升级某个依赖包时,可以通过更新 in 文件中的版本约束,然后重新运行 pip-compile 以生成新的 requirements.txt。这样可以确保所有依赖的版本兼容性。
- 环境同步:使用 pip-sync 可以将开发环境、测试环境和生产环境中的包版本保持一致。这对于团队协作和持续集成/持续部署(CI/CD)流程尤为重要。
- 项目初始化:在新项目的初始化阶段,使用 pip-tools 可以快速设置和锁定项目的基础依赖,确保团队成员和 CI 系统使用相同的依赖环境。
- 管理多个依赖文件:对于有多个依赖文件的项目(例如,开发依赖和生产依赖分开的情况),pip-tools 可以分别管理不同的依赖文件,如 requirements-dev.in 和 requirements-prod.in,并生成相应的锁定文件。
- 解决依赖冲突:pip-tools 会自动处理依赖版本冲突问题,帮助开发者选择一个兼容的版本集合。
通过在这些场景中使用 pip-tools,开发者可以更高效地管理 Python 项目的依赖,减少因依赖版本不一致带来的问题,确保项目在不同环境中的稳定性和一致性。
pip-tools 的主要组件
pip-compile:
- 这个工具用于生成一个锁定的依赖文件(通常是 txt),它是从一个初始的依赖文件(通常是 requirements.in)中解析而来的。
- pip-compile 会解析并固定所有顶级依赖及其子依赖的版本,确保生成的 txt 包含项目所需的所有包及其确切版本。
- 使用 pip-compile 可以避免因为依赖包的版本更新而导致项目无法正常运行的问题。
用法:pip-compile requirements.inpip-sync:
- 这个工具用于将当前 Python 环境中的已安装包与 txt 中锁定的包和版本同步。
- 它会安装 txt 中的所有包,并卸载不在其中的包,确保你的环境与锁定的依赖一致。
用法:pip-sync requirements.txt
注意:pip-sync 是一个破坏性操作,它会卸载所有不在 requirements.txt 中的包,因此在运行之前请确保没有遗漏任何重要的包。
典型工作流程
- 创建初始依赖文件:开发者首先创建一个 in 文件,列出项目的直接依赖(不需要指定版本)。
- 编译依赖文件:运行 pip-compile requirements.in 生成 txt。这个文件会列出所有的依赖以及它们的具体版本。
- 同步依赖:使用 pip-sync requirements.txt 将当前环境与 txt 中的包同步。
pip-tools的使用场景
是否有必要使用 pip-tools 取决于你的项目规模、复杂性以及你对依赖管理的需求。以下是一些考虑因素,可以帮助你决定是否使用 pip-tools:
什么时候使用 pip-tools 是有益的:
- 复杂的依赖关系:如果你的项目有大量的直接和间接依赖,pip-tools 可以帮助你自动解析并锁定所有依赖的版本,避免手动管理的复杂性。
- 需要环境一致性:在团队协作中,确保所有开发人员的环境一致是非常重要的。pip-tools 通过生成锁定的 txt 文件,确保在不同环境中安装相同版本的依赖。
- 生产环境的稳定性:在生产环境中,确保软件运行的稳定性和可靠性至关重要。通过锁定依赖版本,可以避免因为上游库的更新导致的潜在问题。
- 持续集成/持续部署(CI/CD):在 CI/CD 流程中,确保每次构建的环境一致非常重要。pip-tools 可以帮助实现这一点,从而提高构建的可靠性。
- 简化依赖升级:使用 pip-tools 可以更轻松地管理和升级依赖。你可以通过更新 in 文件来升级某个依赖,然后重新生成锁定文件,确保所有依赖版本的兼容性。
什么时候可能不需要 pip-tools:
- 简单的小项目:如果你的项目依赖很少,且你对依赖版本的控制要求不高,那么手动管理 txt 可能已经足够。
- 实验性项目:对于一些实验性或短期项目,你可能不需要严格锁定依赖版本。
- 对依赖版本变化敏感度低:如果你的项目能够适应依赖的频繁更新,并且没有严格的版本要求,那么你可能不需要使用 pip-tools。
Anaconda与WinPython的比较
相同点
- 完整版的 WinPython 和 Anoconda 都含有大量的科学计算包,非常适合用来做数据科学、数据分析与挖掘、机器学习等。
- 二者都自带有 Spyder,Jupyter 等非常强大且成熟的 IDE,编辑和调试代码十分方便。
不同点
- 虽然都面向数据科学领域,但二者集成的软件包还是有所区别,Anoconda 在大数据处理方面有自己特色的一些包。
- WinPython 采用集成的 WinPython 包管理器 WPPM 帮助安装、卸载或升级 Python 包;而 Anoconda 采用 conda 包管理系统。
- Winpython 是由个人维护;Anaconda 是由一家数据分析服务公司维护;这个区别意味着 winpython 在很多方面都从简,而 Anaconda 会提供一些人性化设置。
- Winpython 强调便携性,被做成绿色软件,不写入注册表,安装其实就是解压到某个文件夹,移动文件夹甚至放到 U 盘里在其他电脑上也能用。Anaconda 则算是传统的软件模式。
- Winpython 只能在 windows 上使用,Anaconda 则有 linux 的版本。
- 目前,Anoconda 的适用面和适用人群比 WinPython 更广。
JupyterLab桌面版
JupyterLab 是广受欢迎的 Jupyter Notebook 新界面。它是一个交互式的开发环境,可用于 notebook、代码或数据,因此它的扩展性非常强。用户可以使用它编写 notebook、操作终端、编辑 markdown 文本、打开交互模式、查看 csv 文件及图片等。
尽管有很多 Python IDE(例如 Visual Studio Code、PyCharm 和最近刚出的 DataSpell)都支持编辑 Jupyter Notebooks,我在进行数据科学项目时,JupyterLab 仍然是我的首选 IDE。作为交互式 IDE 首选,JupyterLab 允许我们在基于单元格的组织中逐步可视化数据(例如,表格数据、图像、执行结果等)。
当我们使用 JupyterLab 时,使用终端或使用 Anaconda Navigator 应用程序都可以启动它。但是无论哪种情况,都必须先启动另一个应用程序,然后在浏览器中访问 JupyterLab 的页面。虽然不是什么大不了的事,但多出来的一步在一定程度上代表着不便。为了解决这个问题,JupyterLab 团队一直在努力让它变得更好。好消息是 Jupyter 发布了JupyterLab 桌面应用程序 的发布。
JupyterLab 开发团队,使用 Electron 构建桌面应用程序,因为 Electron 允许程序员使用 Web 开发语言(包括 JavaScript、HTML 和 CSS)开发跨平台桌面应用程序,所以桌面版的 APP 可以独立运行,并且兼容各种平台。需要注意的是,电脑需要安装 conda,因为 JupyterLab Desktop App 需要 conda 环境作为其服务器相关的管理。
关于 JupyterLab 的安装使用,也可以参考先前写的文章: