我最近开始使用Anaconda Python发行版,因为它提供了许多现成的数据分析库。使用conda创建环境和安装软件包也很容易。但是,当我想更新Python本身或任何其他模块时,我遇到了一些严重的问题,我被告知将删除很多现有库。
例如,这就是我使用conda update [package_name]
$ conda update pandas
Collecting package metadata (current_repodata.json): ...working... done
Solving environment: ...working... done
## Package Plan ##
environment location: C:\Users\User\Anaconda3
added / updated specs:
- matplotlib
The following packages will be REMOVED:
[Almost half of my existing packages]
The following packages will be UPDATED:
[Some packages including my desired library, in this case, pandas]
我在网上搜索了如何使用conda
更新软件包和Python的信息,几乎在所有看到建议conda update [package name]
的地方,都可以找到。但是为什么对我不起作用?我的意思是它可以工作,但要以我需要的大量重要库为代价。
因此,我尝试使用Anaconda Navigator更新所需的库(例如matplotlib和pandas),希望删除现有库可能是计算机上的命令行问题。但是我通过使用Navigator更新大熊猫严重弄乱了我的基本(根)环境。我没有收到任何警告,说我的许多模块都将被移除,所以我认为我做得很好。但是在完成更新并编写了一些matplotlib代码之后,我无法运行它。我收到类似于matplotlib的错误,表明matplotlib是“非conda模块”。因此,我必须做conda install --revision n
回到拥有模块的状态。
现在,我更新任何软件包或Python的唯一方法是执行以下操作:
conda install pandas=[package_version_that_is_higher_than_mine]
但是我一定要面对这个问题。任何帮助都非常感激。
编辑:事实证明,问题主要出在我尝试使用基本环境进行更新时。当我使用其他conda环境时,conda update [package_name]
或conda update --all
可以正常工作。
答案 0 :(得分:2)
Anaconda(不同于Conda)旨在用作经过固定兼容性检查的一组固定软件包(请参阅“ What's in a Name? Clarifying the Anaconda Metapackage”)。当您尝试引入新软件包或升级软件包时在上下文中,Conda的解决方案可能相当不可预测,我认为这有助于记住诸如conda (install|upgrade|remove)
之类的命令意味着要求整个整个环境,而不是表示用于更改单个程序包的低级命令。
Conda确实提供了一些选项来实现这种更底层的行为。可以尝试的一件事是--freeze-installed
标志,它可以完成您所要求的。默认情况下,最新版本的Conda在第一轮求解中会执行此操作,如果它不起作用,则会尝试进行完整求解。还有一个更危险和更暴力的--no-dep
标志,它根本无法解决,仅安装软件包即可。该文档的字面意思是
“ 这将导致环境破坏和行为不一致。使用后果自负。”
通常,如果要使用较新的软件包,最好创建一个新的env(conda create -n my_env [pkg1 pkg2 ...]
),因为事实是您不再需要Anaconda发行版,而是自定义了较新的版本。我个人的观点是,大多数非初学者都应该使用Miniconda,并将他们的 base env委托给只有conda
的人,而对于为具有不同包装要求的项目创建env则要非常宽容。如果您需要真正的Anaconda发行版,总可以使用anaconda
软件包。