pyenv+conda 不安装包

pyenv+conda doesn't install packages

我正在尝试使用 conda 安装软件包,但没有任何反应。 conda 没有找到 numpy:

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
    import numpy
ModuleNotFoundError: No module named 'numpy'

但是当我尝试使用 conda 安装 numpy 时,我得到:

$ conda install numpy
Collecting package metadata: done
Solving environment: done

# All requested packages already installed.

而且无论如何也无法强制conda安装它:

$ conda install --force-reinstall numpy
Collecting package metadata: done
Solving environment: done

## Package Plan ##

  environment location: {HOME}/.pyenv/versions/miniconda3-latest

  added / updated specs:
    - numpy



Proceed ([y]/n)? y

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

有没有办法让 conda 真正安装软件包?或者我真的必须卸载所有内容并重新安装所有内容吗?或者是否有安装 python(使用 mkl)的解决方案比 conda 更可怕?


我的环境搭建好了(使用pyenv),要使用conda安装:

$ which python
{HOME}/.pyenv/shims/python

例如

$ python -c "import tqdm; print(tqdm.__file__)"
{HOME}/.pyenv/versions/miniconda3-latest/lib/python3.6/site-packages/tqdm/__init__.py

更新的答案:

第二次尝试回答您的问题(我是 pyenv 的新手,但希望这对您有所帮助):

当使用 pyenv 和 miniconda 时,我会激活你的环境(来自你的 post 的 miniconda3-latest),然后应该使用正确的 conda 来安装你的包:

# Activate your environment
pyenv activate miniconda3-latest

# Install numpy, etc.
conda install numpy

# This then works without errors for me:
python -c "import numpy"

# Deactivate your environment when finish if you want
pyenv deactivate

作为一般观察,pyenv 和 conda 似乎在做类似的事情(参见 https://bastibe.de/2017-11-20-pyenv.html)。 pyenv 我还没有探索太多,但如果我正在使用它,我可能会考虑不将它与 conda 配对,而只是依赖原生 python (venv, pip) 安装包,让 pyenv 完成所有工作环境管理(而不是在其上添加 conda)。

原回答:

我认为 conda 没有任何问题,但您输入的命令可能是在您的系统上调用本机 python,而不是 conda。

这些命令会让你看到你调用的是什么路径:

# for linux/mac
which python

# for windows
where python

如果它显示的内容类似于 /usr/bin/python(对于 linux/mac),那么这不是您正在调用的 python 的 conda 实例。

如果你想调用你已经安装包的实际 conda 实例,你应该找到你的 conda 安装到的位置并使用完整路径调用它:

# taking your example it looks like your python is in
# {HOME}/.pyenv/versions/miniconda3-latest
{HOME}/.pyenv/versions/miniconda3-latest/bin/python -c "import numpy"

# or on my computer it is (~ means home):
~/anaconda3/bin/python -c "import numpy"

希望对您有所帮助!

tl;博士

conda install -f, conda install --force-reinstall什么都不做,手动删除缓存,例如rm -rf {CONDA_LOCATION}/pkgs/{PACKAGE_NAME}* 后跟 conda install {PACKAGE_NAME}.


我终于找到了一个合理的 hack 来强制 conda 安装软件包。 conda 保留一个可以使用 conda info

找到的缓存
$ conda info
...
package cache : {HOME}/.pyenv/versions/miniconda3-latest/pkgs
                {HOME}/.conda/pkgs

只需从缓存中删除与要安装的软件包相关的所有内容:

rm -rf {HOME}/.pyenv/versions/miniconda3-latest/pkgs/numpy*

(考虑在执行此类激进步骤之前进行备份)。之后conda就可以正常安装包了:

$ conda install numpy
Collecting package metadata: done
Solving environment: done

## Package Plan ##

  environment location: {HOME}.pyenv/versions/miniconda3-latest

  added / updated specs:
    - numpy


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    numpy-base-1.15.4          |           py36_2         6.1 MB  intel
    ------------------------------------------------------------
                                           Total:         6.1 MB

The following NEW packages will be INSTALLED:

  numpy-base         intel/linux-64::numpy-base-1.15.4-py36_2


Proceed ([y]/n)? y


Downloading and Extracting Packages
numpy-base-1.15.4    | 6.1 MB    | ################################################################################################################################################################### | 100% 
Preparing transaction: done
Verifying transaction: done
Executing transaction: done