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)
我在 Windows 上得到相同的行为,干净的环境包括您的用户本地包。这是一个未解决的问题:https : //github.com/conda/conda/issues/7173。conda不支持直接(还)执行您的要求。
您始终可以只设置环境变量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)
哈。
| 归档时间: |
|
| 查看次数: |
2407 次 |
| 最近记录: |