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电脑。
你所要做的就是打开水蟒提示并输入
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" "$@"
}
希望这对你有所帮助。
我用以下方法解决了这个问题:
如果你有一个非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版本,并使用该版本安装一个包。
这取决于您如何配置PATH环境变量。
当您的shell解析对pip的调用时,它将找到哪一个bin ?
(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列表。
你不能使用:sudo apt install python3-pip——>新的包不会被添加到conda列表(因此不受conda管理),但你仍然可以使用它们(冲突的可能性)。
我在这里看到了很多很好的答案,但仍然想分享我的,特别是如果你从pip时代转换到conda时代。按照这个步骤,您可以同时使用conda和pip安装任何包。
背景
仅用于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实例名。所以这是必须修复的!