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

H. *_*doh 6 python anaconda

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

> conda create -n testproj python=3.6
> conda activate testproj
> conda install pandas
> python
>>> import pandas as pd
Run Code Online (Sandbox Code Playgroud)

然后我得到了一个导入错误

ImportError: C extension: /home/myname/.local/lib/python3.6/site-packages/pandas/ ...
Run Code Online (Sandbox Code Playgroud)

但是如果我改变了站点包的权限

> chmod 000 ~/.local/lib/python3.6/site-packages
Run Code Online (Sandbox Code Playgroud)

然后我可以毫无错误地导入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']
Run Code Online (Sandbox Code Playgroud)

Mat*_*ith 8

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

您始终可以只设置环境变量PYTHONNOUSERSITE(为任何值),或使用-s开关调用您的解释器,并且您不会获得本地包(~/.local在 Windows 上是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
Run Code Online (Sandbox Code Playgroud)

与(注意-s开关,现在我的本地包不再在我的 上sys.path):

(test-env) C:\Users\matt>python -s -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:\\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: False
Run Code Online (Sandbox Code Playgroud)

哈。