anaconda update all possible packages?

前端 未结 6 1343
悲&欢浪女
悲&欢浪女 2020-12-12 09:12

I tried the conda search --outdated, there are lots of outdated packages, for example the scipy is 0.17.1 but the latest is 0.18.0. However, when I do the

相关标签:
6条回答
  • 2020-12-12 09:48

    if working in MS windows, you can use Anaconda navigator. click on the environment, in the drop-down box, it's "installed" by default. You can select "updatable" and start from there

    0 讨论(0)
  • 2020-12-12 09:52

    Imagine the dependency graph of packages, when the number of packages grows large, the chance of encountering a conflict when upgrading/adding packages is much higher. To avoid this, simply create a new environment in Anaconda.

    Be frugal, install only what you need. For me, I installed the following packages in my new environment:

    • pandas
    • scikit-learn
    • matplotlib
    • notebook
    • keras

    And I have 84 packages in total.

    0 讨论(0)
  • 2020-12-12 09:53

    TL;DR: dependency conflicts: Updating one requires (by it's requirements) to downgrade another

    You are right:

    conda update --all
    

    is actually the way to go1. Conda always tries to upgrade the packages to the newest version in the series (say Python 2.x or 3.x).

    Dependency conflicts

    But it is possible that there are dependency conflicts (which prevent a further upgrade). Conda usually warns very explicitly if they occur.

    e.g. X requires Y <5.0, so Y will never be >= 5.0

    That's why you 'cannot' upgrade them all.

    Resolving

    To add: maybe it could work but a newer version of X working with Y > 5.0 is not available in conda. It is possible to install with pip, since more packages are available in pip. But be aware that pip also installs packages if dependency conflicts exist and that it usually breaks your conda environment in the sense that you cannot reliably install with conda anymore. If you do that, do it as a last resort and after all packages have been installed with conda. It's rather a hack.

    A safe way you can try is to add conda-forge as a channel when upgrading (add -c conda-forge as a flag) or any other channel you find that contains your package if you really need this new version. This way conda does also search in this places for available packages.

    Considering your update: You can upgrade them each separately, but doing so will not only include an upgrade but also a downgrade of another package as well. Say, to add to the example above:

    X > 2.0 requires Y < 5.0, X < 2.0 requires Y > 5.0

    So upgrading Y > 5.0 implies downgrading X to < 2.0 and vice versa.

    (this is a pedagogical example, of course, but it's the same in reality, usually just with more complicated dependencies and sub-dependencies)

    So you still cannot upgrade them all by doing the upgrades separately; the dependencies are just not satisfiable so earlier or later, an upgrade will downgrade an already upgraded package again. Or break the compatibility of the packages (which you usually don't want!), which is only possible by explicitly invoking an ignore-dependencies and force-command. But that is only to hack your way around issues, definitely not the normal-user case!


    1 If you actually want to update the packages of your installation, which you usually don't. The command run in the base environment will update the packages in this, but usually you should work with virtual environments (conda create -n myenv and then conda activate myenv). Executing conda update --all inside such an environment will update the packages inside this environment. However, since the base environment is also an environment, the answer applies to both cases in the same way.

    0 讨论(0)
  • 2020-12-12 09:58

    To answer more precisely to the question:

    conda (which is conda for miniconda as for Anaconda) updates all but ONLY within a specific version of a package -> major and minor. That's the paradigm.

    In the documentation you will find "NOTE: Conda updates to the highest version in its series, so Python 2.7 updates to the highest available in the 2.x series and 3.6 updates to the highest available in the 3.x series." doc

    If Wang does not gives a reproducible example, one can only assist. e.g. is it really the virtual environment he wants to update or could Wang get what he/she wants with

    conda update -n ENVIRONMENT --all
    

    *PLEASE read the docs before executing "update --all"! This does not lead to an update of all packages by nature. Because conda tries to resolve the relationship of dependencies between all packages in your environment, this can lead to DOWNGRADED packages without warnings.


    If you only want to update almost all, you can create a pin file

    echo "conda ==4.0.0" >> ~/miniconda3/envs/py35/conda-meta/pinned
    echo "numpy 1.7.*" >> ~/miniconda3/envs/py35/conda-meta/pinned
    

    before running the update. conda issues not pinned

    If later on you want to ignore the file in your env for an update, you can do:

    conda update --all --no-pin
    

    You should not do update --all. If you need it nevertheless you are saver to test this in a cloned environment.

    First step should always be to backup your current specification:

    conda list -n py35 --explicit 
    

    (but even so there is not always a link to the source available - like for jupyterlab extensions)

    Next you can clone and update:

    conda create -n py356 --clone py35
    
    conda activate py356
    conda config --set pip_interop_enabled True # for conda>=4.6
    conda update --all
    

    conda config


    update:

    Because the idea of conda is nice but it is not working out very well for complex environments I personally prefer the combination of nix-shell (or lorri) and poetry [as superior pip/conda .-)] (intro poetry2nix).

    Alternatively you can use nix and mach-nix (where you only need you requirements file. It resolves and builds environments best.


    On Linux / macOS you could use nix like

    nix-env -iA nixpkgs.python37
    

    to enter an environment that has e.g. in this case Python3.7 (for sure you can change the version)

    or as a very good Python (advanced) environment you can use mach-nix (with nix) like

    mach-nix env ./env -r requirements.txt 
    

    (which even supports conda [but currently in beta])

    or via api like

    nix-shell -p nixFlakes --run "nix run github:davhau/mach-nix#with.ipython.pandas.seaborn.bokeh.scikit-learn "
    

    Finally if you really need to work with packages that are not compatible due to its dependencies, it is possible with technologies like NixOS/nix-pkgs.

    0 讨论(0)
  • 2020-12-12 09:58

    To update all possible packages I used conda update --update-all

    It works!

    0 讨论(0)
  • 2020-12-12 10:12

    I solved this problem with conda and pip.

    Firstly, I run:

    conda uninstall qt and conda uninstall matplotlib and conda uninstall PyQt5

    After that, I opened the cmd and run this code that

    pip uninstall qt , pip uninstall matplotlib , pip uninstall PyQt5

    Lastly, You should install matplotlib in pip by this code that pip install matplotlib

    0 讨论(0)
提交回复
热议问题