如何防止anaconda环境读取本地安装的库

时间:2018-10-04 22:10:49

标签: python anaconda

即使我在anaconda环境中工作,Python也会尝试读取安装在~/.local下的库。

> conda create -n testproj python=3.6
> conda activate testproj
> conda install pandas
> python
>>> import pandas as pd

然后我收到一个ImportError

ImportError: C extension: /home/myname/.local/lib/python3.6/site-packages/pandas/ ...

但是,如果我更改了站点软件包的权限

> chmod 000 ~/.local/lib/python3.6/site-packages

然后,我可以无任何错误地导入pandas。也就是说,Python正在查看anaconda环境之外的内容。

问题:如何防止Python从anaconda环境外部读取库?

环境:openSUSE Leap 15.0

编辑:我发现sys.path下的site-packages包含~/.local。我不认为这些线应该在那儿。

['',
 '/home/myname/anaconda3/envs/myproj/bin',
 '/home/myname/anaconda3/envs/myproj/lib/python36.zip',
 '/home/myname/anaconda3/envs/myproj/lib/python3.6',
 '/home/myname/anaconda3/envs/myproj/lib/python3.6/lib-dynload',
 '/home/myname/.local/lib/python3.6/site-packages',
 '/home/myname/anaconda3/envs/myproj/lib/python3.6/site-packages',
 '/home/myname/.local/lib/python3.6/site-packages/IPython/extensions',
 '/home/myname/.ipython']

1 个答案:

答案 0 :(得分:1)

我在Windows上得到相同的行为,干净的环境包括您的用户本地软件包。这是一个未解决的问题:https://github.com/conda/conda/issues/7173std::__invoke(...)不支持(尚未)直接执行您的要求。

您始终可以仅将环境变量conda设置为任何值,或使用PYTHONNOUSERSITE开关调用您的解释器,而不会在Windows上获得本地包(-s~/.local):

C:\Users\<username>\AppData\Roaming\Python\Python36\site-packages

与之相对(请注意(test-env) C:\Users\matt>python -m site sys.path = [ 'C:\\Users\\matt', 'C:\\Anaconda440\\envs\\test-env\\python36.zip', 'C:\\Anaconda440\\envs\\test-env\\DLLs', 'C:\\Anaconda440\\envs\\test-env\\lib', 'C:\\Anaconda440\\envs\\test-env', 'C:\\Users\\matt\\AppData\\Roaming\\Python\\Python36\\site-packages', 'C:\\Users\\matt\\AppData\\Roaming\\Python\\Python36\\site-packages\\some_lib-1.0-py3.6.egg', 'C:\\Anaconda440\\envs\\test-env\\lib\\site-packages', ] USER_BASE: 'C:\\Users\\matt\\AppData\\Roaming\\Python' (exists) USER_SITE: 'C:\\Users\\matt\\AppData\\Roaming\\Python\\Python36\\site-packages' (exists) ENABLE_USER_SITE: True 开关,现在我的本地软件包不再位于我的-s上)

sys.path

HTH。