Anaconda虚拟环境如何从全局导入模块

3
在Windows PowerShell中工作时,我使用Anaconda创建了一个虚拟环境。
>create conda -n test python=2.7.8

我使用以下步骤进行了激活

>activate test
activating environment "test"...

测试环境中没有任何软件包,只有Python。我检查了test\Lib\site-packages文件夹,发现它是空的。 我启动了Python。

>python
>>>import pandas
>>>pandas.Series(range(1,5))
0  1
1  2
2  3
3  4
dtype: int64

我预计会出现错误信息,因为在这个虚拟环境中没有安装pandas。但实际上似乎是从全局的Anaconda环境中导入了pandas,因为在那里已经安装了pandas。

我认为虚拟环境应该是隔离的。难道我误解了它们应该如何工作吗? 如果它们应该是隔离的,那么问题可能是什么?


你是如何安装conda的? - Paul H
2个回答

0

Windows有一个小怪癖,可能会导致像这样令人困惑的情况,即它总是隐式地将 . (当前目录)放在搜索路径的前面。这意味着,如果您在启动 python 时处于Anaconda目录中,它将运行该目录中的 python.exe ,而不管您的PATH的其余部分是什么样子的(如果您不知道 activate 命令是如何工作的,它通过修改PATH变量中的目录顺序来实现)。

解决方案是在启动Python之前从Anaconda目录中切换到其他目录。


我尝试过这个,但结果仍然一样。我在 Powershell 中,>cd c:\ ,现在提示符显示为 PS C:\>>activate test。PS 提示未发生变化。>python, >>>import pandas,没有错误,pandas 运行良好。很明显 'test' 环境并没有被隔离。 - user4216624
很遗憾,目前在Powershell中“activate”命令无法正常工作。 - asmeurer

0

我是 Stack Overflow 的新手,但我认为我可以帮忙。首先,我需要运行的命令有点不同(我在 Linux 上)。实际上,这就是虚拟环境应该工作的方式。有几个尝试的方法:conda create --dry-run -n test python=2.7.8 查看 pandas 是否正在安装到 venv 中(我不知道为什么会这样)。另一个想法是,当你 activate test 时,提示符是否实际上更改为 venv?也许可以参考:virtualenv-in-powershell


barrymoo - 我确实使用了 --dry-run 开关,并报告说它放入 'test' 的唯一内容是 Python,没有其他软件包。从 PowerShell 中,激活 'test' 后提示符没有改变。我后来尝试从 Cmd Prompt 激活。提示符确实改变了。尝试导入 pandas 会产生 ImportError: No module named pandas。为什么在 PowerShell 中的行为如此不同?这是否意味着我不能使用 PowerShell 访问 Anaconda 环境?如果我使用 virtualenv,我会看到相同的行为吗? - user4216624
查看我在答案中提供的链接,似乎可以在 PowerShell 中使用 venv。 但是,需要进行一些修改。 其中一个用户建议寻找用于 PowerShell 激活的 Scripts\test.ps1 - barrymoo
barrymoo - 谢谢您的帮助。我确实查看了您提供的链接,但是并没有理解。我在PowerShell方面经验很少,批处理脚本更加没有接触过。现在,我满意于知道不要使用PS来在我的conda虚拟环境中工作,并坚持使用Cmd Prompt。我是编程新手,并处于按照指示操作阶段。很容易发现自己置身于完全陌生的领域。当我学到更多时,我希望再次回顾PS + venv问题。我想给您的答案点赞,但似乎我没有足够的积分来这样做。 - user4216624

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