控制台输出:
/home/lizhicheng/.conda/envs/dataprocess/bin/python /home/lizhicheng/DataProcess/txt2csv.py
/home/lizhicheng/.local/lib/python3.8/site-packages/pandas/init.py:11:UserWarning: The NumPy module was reloaded (imported a second time).This can in some cases result in small but subtle issues and is discouraged. import(_dependency)
主要报错信息:
UserWarning: The NumPy module was reloaded (imported a second time).This can in some cases result in small but subtle issues and is discouraged. import(_dependency)
集成编译环境Pycharm,远程ssh连接Ubuntu服务器,运行其中的Python代码,代码解释利用的conda虚拟环境。
我使用conda创建了一个虚拟环境,在虚拟环境中运行代码,运行的代码中使用的包是pandas,没有使用其他任何包。
但是运行一下,莫名其妙的出来一个UserWarning,提示我The NumPy module was reloaded (imported a second time).
我大概理解是Numpy这个包被load了两次。
后来在网上找了很多种解决方案,也问了Chatgpt4,无非是莫名其妙的让我把numpy或者是pandas的packet删了又装,装了又删,这个奇怪的问题仍然没有解决。
后来,我看了完整的控制台输出,发现一个很奇怪很奇怪的问题:
我明明是在conda虚拟环境中,且运行代码的命令是/home/lizhicheng/.conda/envs/dataprocess/bin/python
,用的是conda虚拟环境中的python解释器,那为什么控制台输出本地local python解释器的warning呢(/home/lizhicheng/.local/lib/python3.8/site-packages/pandas)?
所有的Python解释器都会优先使用来自site.USER_SITE
的包,而默认情况下,这个位置是~/.local/lib/pythonX.Y/site-packages
。这是因为site.USER_BASE
默认设置为~/.local
。
扒拉扒拉我还可以说一堆,但是已经没有意义了,因为有点麻烦。
简而言之:所有的Python解释器都会优先使用~/.local/lib/pythonX.Y/site-packages
这个里面的包
那么有没有非常简单简洁的解决方案呢?还真有!
(我可能问题解释的不清楚,但是解决方案是真的有用!)
Edit Configurations...
Interpreter options
这里填-s
解释:
在 Python 命令行中使用 -s
选项的作用是禁用用户的 site
模块。site
模块会在 Python 启动时自动加载,它配置了一些基础的路径设置,例如添加目录到 sys.path
(这是 Python 查找模块的路径列表)。
当使用 -s
选项时,Python 解释器会跳过加载 site
模块。这通常用于在更“干净”的环境中运行 Python,比如在需要避免外部模块干扰的情况下。这样可以确保程序的运行环境不受到某些全局安装的包或用户级配置的影响。
所有的Python解释器都会优先使用~/.local/lib/pythonX.Y/site-packages
这个里面的包,也就是说,~/.local/lib/pythonX.Y/site-packages
这个里面的包具有最高优先级,为了防止这个里面的包对自己创建的conda虚拟环境的影响,我们可以把这个下面的包给清空(是清空~/.local/lib/pythonX.Y/site-packages
目录下的包,但是不要删除这个目录,以免产生不好的影响),然后对于所有的项目,都新建一个conda虚拟环境来解释,这样都不会出现这种warning,也不用去改配置或者环境变量。