Python ImportError报错:No module named ‘numpy.core_multiarray_umath‘

文章目录

  • 背景
  • Import 报错
  • 是版本问题吗?
  • 删除pandas
  • 在Visual Studio中设置Python 环境
    • 为什么要在Visual Studio IDE下继续安装Python package
    • 在Visual Studio安装numpy和pandas
    • PYTHONPATH
    • Debug模式下继续报错
    • 配置Release 工程
    • 优化
    • 不便之处 1
    • 不便之处 2
    • 后续
  • 参考

背景

C++ application 工程中增加python 脚本,实现混编

Import 报错

在python脚本中import pandas,

import os
import pandas as pd

在这里插入图片描述

是版本问题吗?

参考:

  • numpy与python版本不匹配-ImportError: Unable to import required dependencies: numpy

  • Archived: Unofficial Windows Binaries for Python Extension Packages
    这篇博文中介绍的链接能看到package版本和python以及windows系统的对应关系
    在这里插入图片描述

  • 查看版本命令

C:\Windows\System32>pip show numpy
WARNING: Ignoring invalid distribution -umpy (c:\users\junjie\appdata\roaming\python\python310\site-packages)
Name: numpy
Version: 1.22.4
Summary: NumPy is the fundamental package for array computing with Python.
Home-page: https://www.numpy.org
Author: Travis E. Oliphant et al.
Author-email:
License: BSD
Location: c:\program files\python310\lib\site-packages
Requires:
Required-by: pandasC:\Windows\System32>pip show pandas
WARNING: Ignoring invalid distribution -umpy (c:\users\junjie\appdata\roaming\python\python310\site-packages)
Name: pandas
Version: 1.4.3
Summary: Powerful data structures for data analysis, time series, and statistics
Home-page: https://pandas.pydata.org
Author: The Pandas Development Team
Author-email: pandas-dev@python.org
License: BSD-3-Clause
Location: c:\program files\python310\lib\site-packages
Requires: numpy, python-dateutil, pytz
Required-by:

删除pandas

C:\Windows\System32>pip uninstall pandas -y
WARNING: Ignoring invalid distribution -umpy (c:\users\junjie\appdata\roaming\python\python310\site-packages)
WARNING: Ignoring invalid distribution -umpy (c:\users\junjie\appdata\roaming\python\python310\site-packages)
Found existing installation: pandas 1.4.3
Uninstalling pandas-1.4.3:Successfully uninstalled pandas-1.4.3

此时VS Code里面提示报错:

import os
import numpy as np
import pandas as pd  #提示无法找到该moduleprint("PYTHONPATH:", os.environ.get('PYTHONPATH'))
print("PATH:", os.environ.get('PATH'))print("pandas version:", pd.__version__)
print("numpy version:",np.__version__)

继续运行App程序也会出错,这一次出错很明显和之前的不同,也是没有找到pandas module.

Traceback (most recent call last):File "C:\Resource\Git_Source\perf_utils\perf_utils\TextParser\x64\Debug\mergePython.py", line 2, in <module>import pandas as pd
ModuleNotFoundError: No module named 'pandas'

但是令人意外的是,在cmd 命令模式下执行:

pip uninstall pandas -y 

并不会卸载在Visual Stuido中安装的pandas

在Visual Studio中设置Python 环境

为什么要在Visual Studio IDE下继续安装Python package

  • AI回答的内容

Good catch! Seeing an “unresolved import” error for numpy but not os in Visual Studio specifically points to a configuration issue with the IDE. A few things to check:

  1. Make sure the Python environment being used in Visual Studio has numpy installed. The VS Python environment is separate from your global Python install.
  2. Go to Tools -> Python Environments in VS and verify numpy is installed for the environment being used. If not, install it.
  3. Open the Python Environments window (View -> Other Windows -> Python Environments), right click on your environment and select “Install Python Package” and install numpy.
  4. Check that the Python environment and interpreter path are correctly configured in VS under Tools -> Python Tools -> Environment Options.
  5. Review the Python tutorial in Visual Studio to ensure Python tools, environments, and paths are set up correctly: https://learn.microsoft.com/en-us/visualstudio/python/tutorial-working-with-python-in-visual-studio-step-05-installing-packages?view=vs-2022

在Visual Studio安装numpy和pandas

在这里插入图片描述

上面提到说,VS python 的环境和全局的Python是独立的,所以在VS 环境中安装完pandas和numpy,会有如下显示:
在这里插入图片描述
我们也看到了安装pandas过程中额外安装的包

Installing collected packages: pytz, tzdata, six, python-datautil, pandas

虽然在cmd中卸载了pandas,但是在Visual Studio环境下,仍然可以查询到pandas的版本。说明之前pip install 和 uninstall和通过Visual Studio安装的package不在同一个位置
在这里插入图片描述

  • Visutal Stuido pip isntall 的安装目录:
C:\Users\Junjie\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages

在这里插入图片描述

  • cmd pip install 安装的目录:
C:\Users\Junjie\AppData\Roaming\Python\Python310\site-packages

但是当我通过命令行的方式卸载pandas之后,Visual Studio并没有去它自身安装的目录下去寻找pandas, 因此报了:

ModuleNotFoundError: No module named 'pandas'

这是否说明我的工程目录设置的不对呢?我继续问了下


Yes, I have install pandas from VS IDE and uninstall the pandas from cmd side with this cmd: pip uninstall pandas -y. After this action, I think that the application will import pandas correctly from the VS IDE installed directory. But in fact, when I run the C++ application, an error occured: “import pandas as pd ModuleNotFoundError: No module named ‘pandas’” It seams that the application import the pandas from default pip install directory, but not the VS installed directory. Forget to tell the application, the app is constructed from a C++ project but not an python project. In this C++ project, I need to call PyImport_ImportModule to run python script, in which need to “Import pandas as pd” , so how do I to do next step


下面是人工智能给我的回答:


Ah I see, since this is a C++ application importing Python code, the Python environment and module import behavior will be different than just running Python code directly.

Here are a few things you can try:

  • Make sure the Python environment you have configured in Visual Studio is the same one being used by PyImport_ImportModule in your C++ code. Double check the Python interpreter path and version.
  • Set the PYTHONPATH environment variable before calling PyImport_ImportModule to include the path to the VS installed pandas module. This will override the default paths.
  • Alternatively, you can manipulate sys.path before importing pandas to prepend the VS installed site-packages dir.
  • As a test, try installing pandas globally via pip instead of in VS, and see if your C++ code picks it up from the default path.
    Consider using virtual environments to better control the Python environment, packages, and paths for your C++ project separately from any global installs.

这让我注意到在之前打印PYTHONPATH信息时,是空的

import os
print("PYTHONPATH:", os.environ.get('PYTHONPATH'))

蓝色字样中提到:

在调用 PyImport_ImportModule 之前设置 PYTHONPATH 环境变量以包含 VS 安装的 pandas 模块的路径。这将覆盖默认路径。

那么问题就转到PYTHONPATH是什么,并且如何设置

或者,您可以在导入 pandas 之前操作 sys.path 以添加 VS 安装的站点包目录。

PYTHONPATH

PYTHONPATH 是一个环境变量,您可以设置它来添加 python 将在其中查找模块和包的其他目录

print(sys.path)
sys.path.append('C:\\Users\\Junjie\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages')
print(sys.path)

输出:

['C:\\Program Files\\Python310\\python310.zip', 'C:\\Program Files\\Python310\\Lib', 'C:\\Program Files\\Python310\\DLLs', 'C:\\Resource\\Git_Source\\perf_utils\\perf_utils\\TextParser\\x64\\Release', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages\\win32', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages\\win32\\lib', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages\\Pythonwin', 'C:\\Program Files\\Python310', 'C:\\Program Files\\Python310\\lib\\site-packages']['C:\\Program Files\\Python310\\python310.zip', 'C:\\Program Files\\Python310\\Lib', 'C:\\Program Files\\Python310\\DLLs', 'C:\\Resource\\Git_Source\\perf_utils\\perf_utils\\TextParser\\x64\\Release', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages\\win32', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages\\win32\\lib', 'C:\\Users\\Junjie\\AppData\\Roaming\\Python\\Python310\\site-packages\\Pythonwin', 'C:\\Program Files\\Python310', 'C:\\Program Files\\Python310\\lib\\site-packages', 'C:\\Users\\Junjie\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages']

可以看到后面的print就是多了一个‘C:\Users\Junjie\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\LocalCache\local-packages\Python310\site-packages’
这就是Visual Studio安装的package目录

Debug模式下继续报错

报错的内容和第一节一开始的内容相同,根据报错内容中的提示:
Numpy ImportError

  • Debug build on Windows
    Rather than building your project in DEBUG mode on windows, try building in RELEASE mode with debug symbols and no optimization. Full DEBUG mode on windows changes the names of the DLLs python expects to find, so if you wish to truly work in DEBUG mode you will need to recompile the entire stack of python modules you work with including NumPy

  • 建议:release模式,保留debug符号,不进行优化

    try building RELEASE mode with debug symbols and no optimization 
    

配置Release 工程

参考《Visual Studio在Release模式下开启debug调试》 配置Release模式

  • cpp
void merge_csv(string PythonModuleName, string PythonFunctionName, string csv_dir)
{Py_Initialize();// ... 省略PyObject *pModule = NULL;pModule = PyImport_ImportModule(PythonModuleName.c_str());if (!pModule){PyErr_Print();cout << "Python import failed!" << endl;return;}//...省略Py_Finalize();
}
  • python
import os
import sys
print(sys.path)
sys.path.append('C:\\Users\\Junjie\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages')
print(sys.path)
import pandas as pddef merge_csv(csv_dir):#... 省略return

经过上述配置和操作后,程序能正常运行。 这些操作包括:

  • 在Visual Studio Python环境下安装package
  • 编译Release版本

优化

如果在python中添加自定义的Visual Studio 的install path,这样肯定还是不行的。因为移植给其他人用的时候,路径并不一定正确。 此时有一个想法,既然在重新配置sys.path.append()后只增加了Visual Studio的package install目录,那么如果保持pip安装的目录下,两者的版本一致,是不是也一样呢?想到这一点的原因是参考了博文:
python脚本中的sys.path.append(“…”)详解 中提到的

当我们导入一个模块时: import xxx ,默认情况下python解释器会搜索当前目录、已安装的内置模块和第三方模块。
packagepipVS IDE
numpy1.22.41.25.2
pandas1.4.32.0.3
  • 优化:
      1. 卸载掉pip 安装的numpy和pandas
      1. 安装VS 相同的版本
      1. 去掉Python 脚本中额外增加的sys.path.append(xxx)
C:\Windows\System32>pip uninstall pandas -y
C:\Windows\System32>pip uninstall numpy -y
C:\Windows\System32>pip install numpy==1.25.2
C:\Windows\System32>pip install pandas==2.0.3
C:\Windows\System32>pip show numpy
C:\Windows\System32>pip show pandas

此时程序同样能跑起来,也证明了上面的猜想~

不便之处 1

到这里,虽然实现了C++ 和 Python 的混编, 但是整个配置过程较复杂,如果是简单的python脚本,原始安装的python 目录下应该可以满足。但是如果是像pandas这类,可能会遇到版本不一致和Debug/Release模式的问题,这给调试带来了不方便之处。
当然,可以使用虚拟环境去配置C++应用开发环境,从而和global 的环境区分开来。这里暂时没有去研究了。

  • Consider using virtual environments to better control the Python environment, packages, and paths for your C++ project separately from any global installs.

不便之处 2

打包问题。在实现功能后,整个混编环境的打包也难住了我。单纯的python 脚本可以通过pyinstaller 命令打包所需要的package并生成exe可执行文件。但是这类混编的打包好像没有一个命令去实现,这对于工具类的软件不是很方便。当我share这类工具给别人使用的时候,可能需要安装一堆package才能使用。设想了下别人使用该工具时需要做的步骤:

  • 安装指定版本的python
  • 安装指定版本的package(此例中为numpy-1.25.2, pandas-2.0.3)

后续

如果想实现混编并且比较好的打包,看来得研究一下虚拟环境下的C++工程的配置了。

参考

numpy与python版本不匹配-ImportError: Unable to import required dependencies: numpy
PYTHONPATH 变量为空
Step 5: Install packages in your Python environment
Pandas 如何查找已安装的版本
Numpy Troubleshooting
visual stdio c++调用python混合编程
Visual Studio在Release模式下开启debug调试
python脚本中的sys.path.append(“…”)详解

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/86119.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

YOLO v8目标跟踪详细解读(一)

在此之前&#xff0c;我们已经对yolo系列做出了详细的探析&#xff0c;有兴趣的朋友可以参考yolov8等文章。YOLOV8对生态进行了优化&#xff0c;目前已经支持了分割&#xff0c;分类&#xff0c;跟踪等功能&#xff0c;这对于我们开发者来说&#xff0c;是十分便利。今天我们对…

Java基础入门篇——数组初识

一、数组 1.假设某公司有100个员工&#xff0c;需要统计某公司员工的工资情况&#xff0c;首先需要声明100个变量来分别记每个员工的工资&#xff0c;那么如果按照之前的做法&#xff0c;可能定义的结构如下所示&#xff1a; int a1,a2,a3,......a100; 要求你输出这100个员工…

Android系统组件——AMS,App启动中的AMS流程

AMS&#xff08;Activity Manager Service&#xff09;是Android系统中非常重要的一个组件&#xff0c;负责管理应用程序的生命周期、进程调度以及任务栈的管理等任务。本文将从AMS的原理、数据结构、SystemServer加载AMS以及App启动中的AMS流程等方面进行详细介绍&#xff0c;…

【LeetCode】105. 从前序与中序遍历序列构造二叉树

作者&#xff1a;小卢 专栏&#xff1a;《Leetcode》 喜欢的话&#xff1a;世间因为少年的挺身而出&#xff0c;而更加瑰丽。 ——《人民日报》 105. 从前序与中序遍历序列构造二叉树 力扣 题目描述&#xff1a; 给定两个整数数组 preord…

小结:基于 JavaWeb 的宠物店管理系统

宠物店管理系统 系统介绍系统展示登录界面用户注册页面 店主主界面宠物信息管理页面修改宠物信息 宠物出入库管理页面宠物订单查询页面宠物账单查看页面用户信息管理页面修改用户信息 用户主界面宠物订购页面用户订购支付页面 个人资料编辑页面个人订单查看页面 系统说明开发环…

【力扣每日一题】2023.8.11 矩阵对角线元素的和

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一个矩阵&#xff0c;让我们把矩阵对角线上的元素都加起来返回。 那么矩阵的对角线是有两条的&#xff0c;一条是从左上到右下…

CSS3 中新增了哪些常见的特性?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ 圆角&#xff08;Border Radius&#xff09;⭐ 渐变&#xff08;Gradients&#xff09;⭐ 阴影&#xff08;Box Shadow&#xff09;⭐ 文本阴影&#xff08;Text Shadow&#xff09;⭐ 透明度&#xff08;Opacity&#xff09;⭐ 过渡&…

Azure Kinect DK + ROS1 Noetic使用教程

作者&#xff1a; Herman Ye Galbot Auromix 版本&#xff1a; V1.0 测试环境&#xff1a; Ubuntu20.04 更新日期&#xff1a; 2023/08/08 注1&#xff1a; 本文内容中的硬件由 Galbot 提供支持。 注2&#xff1a; Auromix 是一个机器人爱好者开源组织。 注3&#xff1a; 本文在…

当前服务器版本不支持该功能,请联系经销商升级服务器 - - 达梦数据库报错

当前服务器版本不支持该功能&#xff0c;请联系经销商升级服务器 - - 达梦数据库报错 环境介绍1 搭建测试环境2 报错内容3 标准版介绍 环境介绍 某项目使用标准版数据库中&#xff0c;使用insert into 正常操作表&#xff0c;插入数据时报错&#xff0c;表为普通表。 1 搭建测…

Maven: ‘mvn‘ is not recognized as an internal or external command

下载并配置好Maven之后&#xff0c;CMD测试安装是否成功&#xff1a;mvn -v 提示&#xff1a; mvn is not recognized as an internal or external command, operable program or batch file. 检查环境变量&#xff1a; MAVEN_HOME: %MAVEN_HOME%\bin: 看上去没问题&#x…

2.若依前后端分离版第一个增删查改

1.介绍 若依提供了代码生成功能&#xff0c;单表的CRUD可以直接用若依框架提供的代码生成进行创建。 2.实现 2.1 在数据库创建业务表test_teacher 2.2 生成代码 运行系统&#xff0c;进入菜单[系统工具]-》[代码生成],点击导入按钮&#xff0c;选择需要生成代码的表进行导…

UML—浅谈常用九种图

目录 概述: 1.用例图 2.静态图 3.行为图&#xff1a; 4.交互图&#xff1a; 5.实现图&#xff1a; 概述: UML的视图是由九种视图组成的&#xff0c;分别是用例图、类图、对象图、状态图、活动图、序列图、协作图、构件图、实施图。我们可以根据这9种图的功能和实现的目的…

JavaWeb学习|JavaBean;MVC三层架构;Filter;Listener

1.JavaBean 实体类 JavaBean有特定的写法: 必须要有一个无参构造 属性必须私有化。 必须有对应的get/set方法 用来和数据库的字段做映射 ORM; ORM:对象关系映射 表--->类 字段-->属性 行记录---->对象 2.<jsp&#xff1a;useBean 标签 3. MVC三层架构 4. Filter …

如何调教让chatgpt读取自己的数据文件(保姆级图文教程)

提示&#xff1a;如何调教让chatgpt读取自己的数据文件(保姆级图文教程) 文章目录 前言一、如何投喂自己的数据&#xff1f;二、调教步骤总结 前言 chatgpt提示不能读取我们提供的数据文件&#xff0c;我们应该对它进行调教。 一、如何投喂自己的数据&#xff1f; 让chatgpt读…

华为Mate30报名鸿蒙 HarmonyOS 4.0.0.108 系统更新

华为 Mate 30 系列于 2019 年 11 月 1 日上市&#xff0c;包括 Mate 30 4G / 5G、Mate 30 Pro 4G / 5G、保时捷设计版 Mate30 共五款机型。华为 Mate 30 系列 5G 版搭载麒麟 990 5G 处理器&#xff0c;同时支持 SA 及 NSA 5G 双模&#xff0c;适配三大运营商的 5G / 4G / 3G / …

以mod_jk方式整合apache与tomcat(动静分离)

前言&#xff1a; 为什么要整合apache和tomcat apache对静态页面的处理能力强&#xff0c;而tomcat对静态页面的处理不如apache&#xff0c;整合后有以下好处 提升对静态文件的处理性能 利用 Web 服务器来做负载均衡以及容错 更完善地去升级应用程序 jk整合方式介绍&#…

【构建卷积神经网络】

构建卷积神经网络 卷积网络中的输入和层与传统神经网络有些区别&#xff0c;需重新设计&#xff0c;训练模块基本一致 全连接层&#xff1a;batch784&#xff0c;各个像素点之间都是没有联系的。 卷积层&#xff1a;batch12828&#xff0c;各个像素点之间是有联系的。 impor…

将vsCode 打开的多个文件分行(栏)排列,实现全部显示,便于切换文件

目录 1. 前言 2. 设置VsCode 多文件分行(栏)排列显示 1. 前言 主流编程IDE几乎都有排列切换选择所要查看的文件功能&#xff0c;如下为Visual Studio 2022的该功能界面&#xff1a; 图 1 图 2 当在Visual Studio 2022打开很多文件时&#xff0c;可以按照图1、图2所示找到自…

Golang struct 结构体指针类型 / 结构体值类型

struct类型的内存分配机制 结构体变量之间的赋值是值拷贝。 type stu struct {Name stringSlice []stringMap1 map[string]string }func main() {s : stu{}s.Slice make([]string, 6)s.Slice[1] "ssss"s.Slice[2] "xxxx"s.Map1 make(map[string]stri…

基础堆排序

目录 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 基础堆排序