What happens if the same package is installed by both pip and conda in the same environment? Is conda designed to cope with this? Can you safely pip uninstall the pip version without messing up the conda version?
They will be installed in the same directory such as /home/user/miniconda/env/envname/lib/python3.6/site-packages/requests.
So if you install a package by both conda and pip, then uninstall it by pip, the source code has gone. And that means you cannot use this package any more.
When installing packages, pip will check dist-info or egg-info directory while conda will check conda-meta directory. In this case, you can install the same package both by conda and pip if you install it by pip first and then install it by conda. In the reverse case, pip will consider that package has been already installed.
To completely uninstall a package installed both by conda and pip, you need to run both conda remove to remove information in conda-meta and pip uninstall to remove dist-info directory.
According to this post on the Anaconda website, it depends on the package installed.
Issues can arise when conda and pip are used together to create an environment, especially when the tools are used back-to-back multiple times, establishing a state that can be hard to reproduce. Most of these issues stem from that fact that conda, like other package managers, has limited abilities to control packages it did not install. Running conda after pip has the potential to overwrite and potentially break packages installed via pip. Similarly, pip may upgrade or remove a package which a conda-installed package requires. In some cases these breakages are cosmetic, where a few files are present that should have been removed, but in other cases the environment may evolve into an unusable state.
You can remove the package installed as shown in the first answer. But an environment can be restored to a previous revision, in order to undo the damages done, if there are any, by using conda and pip together.
To list the history of each change to the current environment, use conda list --revisions
And to restore it to the previous version, use conda install --revision 2, where 2 is a selected revision number.
Related
I accidentally install a lot of packages using pip install -r requirements.txt under base environment. Then I tried to pip uninstall, but it seems that the uninstalling process is unsuccessful.
I am using the miniconda on Windows. How can I recover the base environment to clean state? Or do I have to reinstall miniconda to remove the whole base environment?
Unlike Conda, Pip doesn't seem to track revisions and Conda doesn't actively what Pip does (it passively detects installed packages in the lib/python*/site-packages).
One idea around that conundrum might be to export a --from-history YAML:
conda env export -n base --from-history
That will include a section of pip: installed packages and you could use that as the list of packages to remove. It could still be problematic if, for example, Pip installed a newer version of a package from PyPI that is essential for the conda package to function.
If truly broken, you can also restore basic Conda functionality by using a standalone tool like Micromamba. See https://stackoverflow.com/a/75381135/570918, but you'll need to check the docs for Windows installation steps.
I started to write my own python package and want to install this in my virtual conda environment. Now, I'm a little bit confused about the possibilities to do this.
In general, during my search I found these two commands to install my package:
pip install -e <my_package>
conda-develop .
Using the first method leads to the desired result and my package is listed, if conda list has been called (although the package is still not visible in the anaconda navigator, but anyway).
In contrast to this the second method only returned "completed operation for: <path_to_my_package>", but didn't install the packe in my environment.
Does anyone know what this could be or what I am doing wrong? As far as I know, there is also the possibility to create packages directly in conda. Is there any advantage for, if it's only a private package for me?
Thank's a lot in advance.
I think here is the case. When you have a conda environment set up. The packages in the conda will be considered as global package. So, if a package is installed in your conda environment and you choose the conda interpreter in your vent environment, that package will be available. And based on your question, what you want is to be able to install a package that is only available in this vent environment. In this case, you can use terminal to go to your project path. And then use the normal pip install , in this way that package will be in the vent environment only.
Issues may arise when using pip and conda together. When combining
conda and pip, it is best to use an isolated conda environment. Only
after conda has been used to install as many packages as possible
should pip be used to install any remaining software. If modifications
are needed to the environment, it is best to create a new environment
rather than running conda after pip. When appropriate, conda and pip
requirements should be stored in text files.
Use pip only after conda Install as many requirements as possible with
conda then use pip.
Pip should be run with --upgrade-strategy only-if-needed (the
default).
Do not use pip with the --user argument, avoid all users installs.
And here is the official guild about using conda with pip.
As I understand it, if I use pip install ___, that package will go to my global version of python. If I change directory to the within my Conda environment then that package will be isolated within the environment. Is this correct?
I have searched to try and find where to put the pip packages (within my Conda environment). It used to be that you would install the pip packages in /Anaconda3/envs/venv_name/bin/. It appears the bin folder is now located within the Library folder, like this: /Anaconda3/envs/venv_name/Library/bin. Is the bin folder still the recommended place to put the packages installed by pip?
In other words should I be placing the pip installed packages here: /Anaconda3/envs/venv_name/Library/bin ?
No Specification Needed
Fortunately, one need not manually specify where to install the packages. Instead, if one uses the pip associated with the environment, packages will install to the site-packages directory of environment's python by default.
Example
> conda activate venv_name
# check that you are using the right pip
> which pip
/Anaconda3/envs/venv_name/bin/pip # should be something like this
> pip install <package name>
This will install packages into /Anaconda3/envs/venv_name/lib/python3.7/site-packages/, or whatever Python version you have installed for the environment.
⛔️ Important Note: There are some flags for pip install that change this behavior, most notably the --user flag. Conda users are strongly discouraged from using this flag because it installs packages at a user-level, leading to packages being visible to other environments with matching Python versions (major+minor).
Caution: Mixing PyPI and Conda Packages
Be aware that (as #WilliamDIrons pointed out), it is usually preferable to use conda install -n venv_name <package name> instead of pip. The common practice is to only use pip in a Conda environment when the package is not available through a Conda repository. It is strongly recommended to read and follow the best practices found in the "Using pip in an environment" documentation.
I was informed that if I have installed anaconda to organize python then I would better install using:
conda install mypackage
rather than
pip3 install mypackage
Is that true? if that is true, can anyone tell some reason for that? version inconsistent or hard to maintain?
You can install your packages with both conda and pip, all of them would work well. The only difference is that conda is Anaconda's package manager, while pip is Python package manager, so there could be some version incompabilities between the packages, installed from different packages into one virtual environment.
Actually there are some difference here:
conda install will install package in your venv environment when you are install under some environment.which may be some thing like: d:/.../venv
while
pip install will install package in some system folder, in my computer is like c:/users/.../
you can definitely change the order of the path in your sys.path to decide which version of package you can use, if you have more than one version installed(if you install numpy
using both conda install and pip install then you may get two versions in two different folders)
There may be some way to put the installed package from pip also in venv folder, I am trying to find it.
There are two pips in my environment, I use the command "conda list" to list them
pip 18.0
pip 9.0.1 py35_1
I want to remove pip 9.0.1, how can I do it?
Have you tried conda uninstall pip=*version*?
You could also run conda uninstall pip (possibly conda uninstall pip*) and remove both versions, then install the latest version of pip after that.
Two versions of pip in a single conda env should not happen through the usual update processes. Either you mistakenly installed the second, or something went very wrong with anaconda. If you suspect that it is something on anaconda's end, then this is a good opportunity for some spring cleaning. Export and then remove the environment, update and clean conda, then either:
Rebuild the environment by removing anything you don't need from your exported environment file and importing this environment again. Then run another conda update --all to ensure you are on the latest version for these packages.
OR Create a fresh environment, manually go through your exported environment and install only your most-used packages. I'd recommend this one, to get a better understanding of what dependencies your projects actually need.
Addendum:
Kota Mori comments that:
Two pip's can happen if you: 1. conda istall pip, then 2. pip install pip --upgrade.
I did not consider this in my original answer. The Conda user guide does not explicitly advise against installing packages through a non-conda version of pip: Anything installed by your pip 18.0, is in the currently active conda environment.
Pip packages do not have all the features of conda packages, and we recommend first trying to install any package with conda. [...] To gain the benefits of conda integration, be sure to install pip inside the currently active conda environment, and then install packages with that instance of pip.
However, (and this is speculation) given that Anaconda aims to simplify package management for Python and R, it may be developed for the pip version delivered by conda. Delivering v10 would then be deliberate. I would personally be wary of unintended side effects and would choose to recreate my environment if I cannot cleanly uninstall v18 and return to v10, or whichever version is currently distributed through conda.