跨目录将break.cpp导入Python文件car.py的方法咨询
解决Python导入同级目录C++模块的路径问题
先明确你的项目结构(根目录为项目根):
project_root/ ├── software/ │ └── car.py └── shared/ └── break.cpp
方法1:动态添加shared目录到Python路径(最直接,适合多人协作)
在car.py的开头添加以下代码,通过相对路径将shared目录加入Python的搜索路径,这样就能找到编译后的pybind11模块:
import os import sys # 获取car.py所在目录的绝对路径 current_dir = os.path.dirname(os.path.abspath(__file__)) # 向上走一级到项目根目录,再拼接shared目录 shared_dir = os.path.join(current_dir, '../shared') # 将shared目录添加到sys.path sys.path.append(os.path.abspath(shared_dir)) # 现在可以导入编译后的模块(假设你用pybind11编译出的模块名为break_module) import break_module
注:这里的break_module是你用pybind11编译break.cpp后生成的模块文件名(比如Linux下是break_module.so,Windows下是break_module.pyd),根据你的实际编译结果调整。
方法2:将项目转为Python包结构(更规范)
- 在项目根目录、
software目录、shared目录下都创建空的__init__.py文件,让Python识别为包:
project_root/ ├── __init__.py ├── software/ │ ├── __init__.py │ └── car.py └── shared/ ├── __init__.py └── break.cpp
- 确保pybind11编译后的模块放在
shared目录下,然后在car.py中使用绝对导入:
from shared import break_module
- 注意:运行脚本时要从项目根目录执行,比如用
python -m software.car,而不是直接在software目录下运行python car.py,否则会导致包路径识别错误。
你之前尝试失败的原因
你用from shared.car import *是错误的:
- 首先,
shared目录下没有car.py,你要导入的是break.cpp编译后的模块,不是car模块; - 其次,Python默认不会搜索同级的
shared目录,需要手动添加路径或用包结构。
内容的提问来源于stack exchange,提问作者cyka
相关产品推荐
相关产品推荐

