Conda在激活环境之外寻找库

3

我正在使用Windows系统,在conda创建的环境中发现了一些导入行为上的差异,但是我无法理解,以下是详细情况:

案例1(成功)

(base) C:\> conda activate <env-name>
(env-name) C:\> python
>>> import numpy
(Success)

案例2(失败)

C:\> cd <path-to-conda-env>
C:\path-to-conda-env> python
>>> import numpy
(Fail)

我之前在使用“ssl”包时遇到了这个问题,可以通过从“conda-forge”安装包而不是“default”来解决,所以这似乎是一个包的问题。
困扰我的是导入语句似乎加载了环境外的东西,因为我检查了“sys.path”和“sys.executable”,两种情况下它们都是相同的。
我错过了什么?欢迎任何意见。
敬礼

问题可能是您的系统路径上有一个Python,当conda环境未激活时将使用它。 - Attila Bognár
2个回答

2
我在我的电脑上使用Anaconda 2018.12复现了问题(sys.path相同,排除了我最初的猜测:%PYTHONPATH%)。环境设置(无论是AncaondaVEnv还是其他任何工具)主要包括设置一些环境变量。
在测试了一些模块后(除了numpyssl),通过查看错误,我意识到失败的模块有其自己的其他.dll依赖项。考虑到[MS.Docs]: 动态链接库搜索顺序,我在Python进程中显示了我的%PATH%变量的内容。在启用conda的版本中,以下路径出现在开头:
>>> import os
>>> import pprint
>>>
>>> pprint.pprint(os.environ["PATH"])
('e:\\Install\\x64\\Anaconda\\Anaconda\\2018.12;e:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Library\\mingw-w64\\bin;e:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Library\\usr\\bin;e:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Library\\bin;e:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\Scripts;e:\\Install\\x64\\Anaconda\\Anaconda\\2018.12\\bin;
# The rest of the dirs (regular ones)
毫无疑问,在启动普通的Python之前,将它们添加到我的%PATH%中可以解决这个问题。原始答案是"最初的回答"。
e:\Install\x64\Anaconda\Anaconda\2018.12>set PATH=e:\Install\x64\Anaconda\Anaconda\2018.12;e:\Install\x64\Anaconda\Anaconda\2018.12\Library\mingw-w64\bin;e:\Install\x64\Anaconda\Anaconda\2018.12\Library\usr\bin;e:\Install\x64\Anaconda\Anaconda\2018.12\Library\bin;e:\Install\x64\Anaconda\Anaconda\2018.12\Scripts;e:\Install\x64\Anaconda\Anaconda\2018.12\bin;%PATH%

e:\Install\x64\Anaconda\Anaconda\2018.12>python
Python 3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> import ssl
但是,你应该始终遵循推荐的方式(尤其是当不完全了解情况时),即激活环境,因为即使这对于这种情况有效,它可能对其他情况无效。 @EDIT0
如我在其中一条评论中指定的那样,在PyCharm中添加环境,请按照[SO]: How to install Python using the “embeddable zip file” (@CristiFati's answer)的步骤进行,并进行一些提醒:
  • 在第#4.步中,确保选择“Conda Environment”,而不是“Virtualenv Environment
  • 显然,在启动Python Console时问题仍然存在。 这不应该是这种情况,似乎环境未设置。 也许是因为我没有创建环境,我只是从根Anaconda安装中启动Python? 无论如何,作为一个解决方法(gainarie),我正在为Python Console(从“Settings -> Build, Execution, Deployment -> Console -> Python Console”)应用相同的更改(设置%PATH%),如下图所示:

    Img00 - Console settings

    控制台重新启动后,一切正常。


不小心将第一条评论删除了,尝试在我的环境下添加由conda激活添加的路径,一切都正常工作了,谢谢! - Bill
1
以下是如何在PyCharm中设置Python解释器的方法:https://dev59.com/eqzka4cB1Zd3GeqP3Rpl#50819634。唯一的区别在于,在第四步中,您应该选择“Conda环境”(而不是Vitrualenv),并且它应该可以正常工作,无需进行其他更改。 - CristiFati
嗨CristiFati,我对解释器部分很熟悉,问题出在PyCharm的Python控制台上,它会有相同的导入问题。通过你的第一次回复,我能够找到一个设置来在调用交互式控制台之前设置路径,这解决了问题,再次感谢! - Bill
我明白了,我有同样的问题。https://medium.com/infinity-aka-aseem/how-to-setup-pycharm-with-an-anaconda-virtual-environment-already-created-fb927bacbe61。我没有创建任何环境,只是启动了Anaconda安装,也许这就是问题所在。 - CristiFati
编辑了关于Python控制台问题的答案。这只是一个解决方法,但它能解决问题。 - CristiFati
显示剩余2条评论

0

你需要激活你的环境。 看这里:

(base) C:\> conda activate <env-name>
(env-name) C:\> python
>>> import numpy
(Success)

有一个(base)这意味着当前活动的环境名称是based。 尝试执行 conda info --envs

查看环境列表。

当你执行:

C:\> cd <path-to-conda-env>
C:\path-to-conda-env> python
>>> import numpy
(Fail)

您正在导航到环境文件夹,但您没有使用其中包含的Python环境。

请尝试使用以下命令:

which python

查看你正在使用的Python版本。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接