即使我在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']
答案 0 :(得分:1)
我在Windows上得到相同的行为,干净的环境包括您的用户本地软件包。这是一个未解决的问题:https://github.com/conda/conda/issues/7173。 std::__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。