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

标签 python anaconda

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

> 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 包含 ~/.local 下的 site-packages。我不认为这些线应该在那里。

['',
 '/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']

最佳答案

我在 Windows 上得到了相同的行为,干净的环境包括您的用户本地包。这是一个 Unresolved 问题: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

对比(注意 -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

HTH.

关于python - 如何防止anaconda环境读取本地安装的库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52655887/

相关文章:

python - pymongo 数据库的 insert() 和 insert_one() 方法都不能调用“Collection”对象

python - 实例化时 Django REST 框架序列化器错误

python - 将值从cloudformation传递给用python编写的lambda函数

python - Seaborn 不会在 Conda 中更新到最新版本

python - 启用 Anaconda 中 IPython qtconsole 的 Gnome/GTK 集成

python - 从 Anaconda Python 运行 Spyder 时出现问题

python - GPU计算能力3.0,但最低要求的Cuda能力为3.5

python - .ui 文件中的 PyQt 更改元素

Python if、elif、else 当 if 不为 true 时出现问题跳过

Ubuntu中的rpy2安装错误