conda 4.2.13 MacOSX 10.12.1

我试图将包从pip安装到使用anaconda创建的新环境(虚拟)。在水蟒的文件里说这是完全没问题的。它的实现方式与virtualenv相同。

激活你想要放置程序的环境,然后pip安装程序…

我在《Ananconda》中创造了一个空旷的环境:

conda create -n shrink_venv

激活:

source activate shrink_venv

然后,我可以在终端中看到我正在我的环境(shrink_venv)中工作。当我尝试使用pip安装一个包时,问题出现了:

(shrink_venv): pip install Pillow

Requirement already satisfied (use --upgrade to upgrade): Pillow in /Library/Python/2.7/site-packages

因此,我可以看到它认为从系统范围的包中满足了需求。所以看起来环境没有正常工作,绝对不像文档中说的那样。我做错什么了吗?

只是一个说明,我知道你可以使用conda安装包,但我从anaconda的枕头有一个问题,所以我想从pip得到它,因为医生说这是好的。

输出-a pip:

/usr/local/bin/pip
/Users/my_user/anaconda/bin/pip

**更新** 我发现这是一个很常见的问题。我发现conda env不能很好地与PYTHONPATH一起使用。即使在使用conda环境时,系统似乎总是在PYTHONPATH位置中查找。现在,当使用conda环境时,我总是运行未设置的PYTHONPATH,它工作得更好。我用的是mac电脑。


当前回答

我尝试了以上所有的方法。因为公司环境中的代理设置有问题,所以我没有使用过。幸运的是,我可以从浏览器打开pypi网站。最后,以下几点对我有用:

激活你的环境 手动从。whl下载包 https://pypi.org/simple/ < package_name > / 在激活环境的情况下,导航到从命令行下载.whl的文件夹 执行: PIP安装

其他回答

我用以下方法解决了这个问题:

如果你有一个非conda pip作为你的默认pip,但conda python是你的默认python(如下所示)

>which -a pip
/home/<user>/.local/bin/pip   
/home/<user>/.conda/envs/newenv/bin/pip
/usr/bin/pip

>which -a python
/home/<user>/.conda/envs/newenv/bin/python
/usr/bin/python

那就不要只是打电话 PIP install <package>,您可以使用模块标志-m与python一起使用,以便它使用anaconda python进行安装

python -m pip install <package>

这会将包安装到anaconda库目录,而不是安装到与(非anaconda) pip关联的库目录

编辑: 这样做的原因如下: 命令PIP引用一个特定的PIP文件/快捷方式(-a PIP告诉您是哪个)。类似地,命令python引用一个特定的python文件(-a python会告诉你是哪个文件)。由于这样或那样的原因,这两个命令可能变得不同步,所以你的“默认”pip与你的默认python在不同的文件夹中,因此与不同版本的python相关联。

相反,python -m pip构造不使用pip命令所指向的快捷方式。相反,它要求python找到它的pip版本,并使用该版本安装一个包。

我知道最初的问题是关于MacOS下的conda。但是我想分享一下我使用Ubuntu 20.04的经验。

在我的例子中,这个问题是由于~/中定义的别名。Bashrc: alias pip='/usr/bin/pip3'。那个化名比其他任何事都重要。

因此,出于测试目的,我删除了运行unalias pip命令的别名。说明active conda环境对应的pip已经正常执行。

同样的问题也适用于python命令。

根据Anaconda博客文章中描述的信息,我认为最佳实践是创建一个环境文件,这样就可以可预测地创建conda环境。

我尝试了这里发布的一些答案,但都没有成功,我不想乱搞python路径等。相反,我添加了一个环境。Yml文件类似如下:

name: your-environment-name
channels:
  - defaults
dependencies:
  - python=3.9.12
  - requests=2.28.1
  - pandas=1.4.4
  - pip=21.2.4
  - pip:
    - python-dotenv==0.19.2

这保证您首先安装所有conda依赖项,然后在conda环境中安装pip,并使用它来安装通过conda不可用的依赖项。这是可预测的、可重用的,并且遵循了博客文章中描述的建议。

然后使用下面的命令创建一个新的conda环境:

conda env create -f environment.yml

如果你使用的是windows操作系统,打开Anaconda提示并输入activate yourenvname

如果你使用的是mac或Linux操作系统,打开终端,输入source activate yourenvname

Yourenvname这里是您想要在其中安装PIP包的理想环境

输入上述命令后,您必须看到控制台输出中的环境名称从base更改为您键入的环境yourenvname(这意味着您现在处于所需的环境上下文中)

然后你所需要做的就是正常的pip安装命令,例如pip install yourpackage

通过这样做,pip包将安装在Conda环境中

如果在创建conda环境时没有添加pip

conda create -n env_name pip

也没有在环境中安装PIP

source activate env_name
conda install pip

那么您得到的唯一PIP就是系统PIP,它将全局安装包。

正如您在这个问题中所看到的,即使您执行了上面提到的任何一个过程,pip在conda环境中的行为仍然是未定义的。

为了确保使用安装在conda环境中的pip,而不必键入冗长的/home/username/anaconda/envs/env_name/bin/pip,我写了一个shell函数:

# Using pip to install packages inside conda environments.
cpip() {
    ERROR_MSG="Not in a conda environment."
    ERROR_MSG="$ERROR_MSG\nUse \`source activate ENV\`"
    ERROR_MSG="$ERROR_MSG to enter a conda environment."

    [ -z "$CONDA_DEFAULT_ENV" ] && echo "$ERROR_MSG" && return 1

    ERROR_MSG='Pip not installed in current conda environment.'
    ERROR_MSG="$ERROR_MSG\nUse \`conda install pip\`"
    ERROR_MSG="$ERROR_MSG to install pip in current conda environment."

    [ -e "$CONDA_PREFIX/bin/pip" ] || (echo "$ERROR_MSG" && return 2)

    PIP="$CONDA_PREFIX/bin/pip"
    "$PIP" "$@"
}

希望这对你有所帮助。