You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

跨目录将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包结构(更规范)

  1. 在项目根目录、software目录、shared目录下都创建空的__init__.py文件,让Python识别为包:
project_root/
├── __init__.py
├── software/
│   ├── __init__.py
│   └── car.py
└── shared/
    ├── __init__.py
    └── break.cpp
  1. 确保pybind11编译后的模块放在shared目录下,然后在car.py中使用绝对导入:
from shared import break_module
  1. 注意:运行脚本时要从项目根目录执行,比如用python -m software.car,而不是直接在software目录下运行python car.py,否则会导致包路径识别错误。

你之前尝试失败的原因

你用from shared.car import *是错误的:

  • 首先,shared目录下没有car.py,你要导入的是break.cpp编译后的模块,不是car模块;
  • 其次,Python默认不会搜索同级的shared目录,需要手动添加路径或用包结构。

内容的提问来源于stack exchange,提问作者cyka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 14:45:30