使用Pip将包安装到Anaconda Environment

< p > conda 4.2.13 MacOSX 10.12.1 < / p >

我试图将包从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 install的包,但我有一个问题与枕头从anaconda,所以我想从pip得到它,因为医生说这是好的。

which -a pip的输出:

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

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

715877 次浏览

对于其他遇到这种情况的人,我发现这是最直接的解决方案:

  1. 运行conda create -n venv_nameconda activate venv_name,其中venv_name是虚拟环境的名称。

  2. < p > conda install pip运行。这将把pip安装到venv目录。

  3. 找到你的anaconda目录,并找到实际的venv文件夹。它应该是像/anaconda/envs/venv_name/这样的地方。

  4. 通过执行/anaconda/envs/venv_name/bin/pip install package_name安装新包。

现在应该成功地使用虚拟环境的pip安装包了!

你所要做的就是打开水蟒提示并输入

pip install package-name

它将自动安装到anaconda环境而无需使用

conda install package-name

由于一些conda包可能在以后的时间里缺乏支持,因此需要使用pip安装,这是一种方法

如果你在anaconda中安装了pip,你可以在jupyter笔记本或链接到anaconda的python shell中运行以下命令

pip.main(['install', 'package-name'])

pip.__version__检查pip的版本。如果是10.x.x或更高版本,则使用这行代码安装python包

subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'package-name'])

在你的jupyter笔记本中,你可以通过pip在单元格中安装python包;

!pip install package-name

或者你也可以使用与anaconda相关的python版本

!python3.6 -m pip install package-name

如果在创建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" "$@"
}

希望这对你有所帮助。

我在anaconda上安装一个非conda包时遇到了一个问题,我遵循了这里最喜欢的答案,它不顺利(可能是因为我的anaconda在F目录下,env创建在C中,bin文件夹没有创建,我不知道,但它不起作用)。

根据anaconda pip已经安装(在anaconda提示符上使用命令“conda list”找到),但pip包没有安装,所以这是我所做的,我再次安装pip,然后pip安装包。

conda install pip
pip install see

see是一个非conda包。

对于那些希望使用pip在conda中安装少量软件包的人,

sudo $(which pip) install <instert_package_name>

为我工作。

Explainaton

无论如何,对我来说,which pip似乎是非常可靠的,可以找到通往你所在位置的conda env pip路径。然而,当使用sudo时,这似乎是重定向路径或以其他方式破坏这个。

使用$(which pip)独立于sudo或任何命令执行此操作,类似于在Linux中运行/home/<username>/(mini)conda(3)/envs/<env_name>/pip。这是因为$()是单独运行的,并且文本输出添加到outer命令中。

如果你只有想要有一个conda安装。只需从PATH变量中删除所有其他python路径。

只留下:

C:\ProgramData\Anaconda3
C:\ProgramData\Anaconda3\Scripts
C:\ProgramData\Anaconda3\Library\bin

这允许你只使用pip install *,它会直接安装到conda安装中。

以上答案主要基于virtualenv的使用。我刚刚安装了anaconda3,没有安装任何virtualenv。所以,我已经找到了一个更好的替代方案,而不考虑创建virtualenv。

如果您在linux中安装了许多pip和python版本,则首先运行以下命令列出所有已安装的pip路径。

皮普的思想在何处

您将得到类似这样的输出。

/usr/bin/pip /home/prabhakar/anaconda3/bin/pip /usr/share/man/man /pip.1.gz

复制pip的路径,你想用它来安装你的包,并将它粘贴在sudo替换/home/prabhakar/anaconda3/bin/pip之后。

sudo /home/prabhakar/anaconda3/bin/pip install <package-name>

这对我来说很有效。如果你有任何问题安装,请评论。

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

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

yourenvname这里是你想要安装pip包的理想环境

在输入上面的命令后,你必须看到你的环境名称在控制台输出中从base更改为你输入的环境yourenvname(这意味着你现在在你想要的环境上下文中)

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

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

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

如果你有一个非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>,你可以在python中使用模块标志-m,以便它使用anaconda python来安装

python -m pip install <package>

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

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

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

这是我的工作(参考图片链接)

  1. 打开水蟒
  2. 在home下面的左侧窗格中选择Environments
  3. 就在你选择的地方的右边,在“搜索环境”栏的下面,你应该看到base(root)。点击它
  4. 应该会出现一个指向右边的三角形,点击它,选择“open terminal”
  5. 在这里使用常规的pip安装命令。不需要指向一个环境/路径

为了将来的参考,如果您碰巧有一个已经满足的需求,您可以找到您的包下载到的文件夹。你可以在终端上看到它。它应该像这样读:已经满足的需求,然后是路径

[pip install anaconda]

python -m pip install Pillow

是否使用当前Python激活的pip

source activate shrink_venv

取决于你如何配置PATH环境变量。 当您的shell解析对pip的调用时,它将找到哪一个bin ?< / p >

(test)$ whereis pip
pip: /home/borja/anaconda3/envs/test/bin/pip /home/borja/anaconda3/bin/pip

确保anaconda安装中的bin文件夹位于/usr/lib之前(取决于您如何安装pip)。举个例子:

(test) borja@xxxx:~$ pip install djangorestframework
....
Successfully installed asgiref-3.2.3 django-3.0.3 djangorestframework-3.11.0 pytz-2019.3 sqlparse-0.3.1


(test) borja@xxxx:~$ conda list | grep django
django                    3.0.3                    pypi_0    pypi
djangorestframework       3.11.0                   pypi_0    pypi

我们可以看到djangorestframework安装在我的测试环境中,但如果我检查我的基础:

(base) borja@xxxx:~$ conda list | grep django


它是空的。

就我个人而言,我喜欢使用.pam_environment来处理所有的PATH配置,这里有一个例子:

(base) borja@xxxx:~$ cat .pam_environment
PATH DEFAULT=/home/@{PAM_USER}/anaconda3/bin:${PATH}

多一个注释。安装pip的方式可能会产生问题:

  • 你应该使用:conda install pip——>使用pip安装的新包将被添加到conda列表。

  • 你shodul NOT使用:sudo apt install python3-pip——>新的包将不会被添加到conda列表(因此不受conda管理),但你仍然可以使用它们(冲突的可能性)。

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

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

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

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

因此,出于测试目的,我删除了运行unalias pip命令的别名。那么相应的活动conda环境的pip已经被正确执行。

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

卸载重复的python安装。只需要保留anaconda并创建一个env,使用这里指定的所需python版本:https://docs.conda.io/projects/conda/en/latest/user-guide/tasks/manage-python.html。然后,当你在envs之间切换时,你的python和pip版本会发生变化。

我在这里看到了很多很好的答案,但仍然想分享我的,特别是如果你从pip时代转换到conda时代。这样,你就可以同时使用condapip安装任何包。

背景

  • 仅用于Python包管理器
  • Conda -包括Python在内的许多语言的包和环境管理器

每次创建新的conda环境时,默认安装Pip

# this installs pip for your newly created environment
conda create -n my_new_env pip


# activate your new conda environment
conda activate my_new_env


# now you can install any packages using both conda and pip
conda install package_name


#or
pip install package_name

这让你可以灵活地在conda环境中安装任何包,即使它们在conda中不可用(例如wordcloud)。

conda activate my_new_env


# will not work as wordcloud is not available in conda
conda install wordcloud


# works fine
pip install wordcloud

今天,我已经花了好几个小时研究这个答案和其他很多答案,但以我30年的编程经验,我还是无法解决这个问题。

我跑:

conda create -n myenv python=3.9
conda activate myenv

不能用皮普。然而,在另一个环境中,如myenv2、myenv3、myenv4,它是有效的。

我得到了可怕的urllib3 httpconnection错误。

所以我认为这是urllib3缺失错误或其他什么。事实证明,事情远比这险恶得多。不幸的是,它在其他环境中也能工作,对我来说,我认为这与我在WSL2的Windows 10上使用Debian有关。解决办法很简单:

rm -rf $HOME/.cache

pip缓存已从相同环境的前一次安装中损坏。可能是因为我在conda基础上运行了更新,并进行了分发升级。因为我想用apache2运行一个带有flask的使用WSGI环境的生产系统,所以我希望始终具有相同的conda实例名。所以这是必须修复的!

鉴于此Anaconda博客文章中描述的信息,我认为最佳实践是创建一个环境文件,以便可以可预测地创建conda环境。

我尝试了这里发布的一些答案,但都没有成功,我不想乱搞python路径等。相反,我添加了一个类似于下面的environment.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