no module namedXXX,python从其他目录下 import 一直报错(dll、py...)

参考了网友的各种方法,始终是无法将其他目录下的dll导出来,一直提示no module named xxx。
最终觉得问题还是出在路径上,通过绝对路径导包也还是出问题。。。最终我决定在__init__.py文件中提前将临时目录加入到sys.path内,再import

环境

python3.6
vscode

目录结构

我的目录结构大概是这样的,我的test1.py需要:
1、导入同级目录下的moduleA.py
2、导入config内的need.dll文件
在这里插入图片描述

解决方法

1、检查需要导入的包(config)文件下是否有__init__.py文件
2、检查是否将需要导入模块的路径加入到系统路径中,可以用以下命令检查

import sys
print(sys.path)

因为一直是以下的写法报错,一直提示config内没有need模块

#test1.py
from config import need

所以,我决定,在__init__.py文件内将config的路径加入到系统路径中。因为导包时,会先执行__init__.py文件,再进行其他的导入。所以可以改为以下形式

#__init__.py
import os
import sys
cur_path = os.path.abspath(__file__)
parent_path = os.path.abspath(os.path.dirname(cur_path) + os.path.sep + ".")
sys.path.append(parent_path)

test1.py内的调用改写为:

import config
import need

如果直接在test1.py中先写入sys.path.append(…)再import need
则依旧会报错,这是因为需要确保config的路径先加入到系统中了,再执行
import need 才可以。[当然了,有的网友就是这样直接写解决了他们的问题,但是直接在test1.py中写入我的是一直没办法的解决的,所以大家尝试了别的方法不行的话,可以试试我这种~]

其他问题

至于关于路径的问题、还有原理、其他的问题,有位网友已经进行了总结,在这儿就不过多赘述了,有其他问题的小伙伴可以直接参考:

https://blog.youkuaiyun.com/edward_zcl/article/details/88803461?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.nonecase

### 问题分析 在导入 `dgl` 库时遇到的 `ModuleNotFoundError: No module named 'setuptools.extern'` 错误通常是由以下几个原因之一引起的: 1. **Python 环境配置不正确**:可能由于 Python 的某些依赖库未正确安装或版本冲突。 2. **Setuptools 版本过高或过低**:`setuptools` 是许多 Python 包的核心依赖项,其版本需要与目标包兼容。 3. **DGL 或 PyTorch 安装失败**:如果 DGL 和 PyTorch 的安装过程出现问题,则可能导致缺失必要的动态链接库文件。 以下是针对该问题的具体解决方案及其背后的原理。 --- ### 解决方案 #### 方法一:降级 Setuptools 到合适版本 有时最新的 `setuptools` 可能会与其他依赖项(如 PyTorch)发生版本冲突。可以通过将 `setuptools` 升级或降级到特定版本来解决问题。具体操作如下: ```bash pip uninstall setuptools -y pip install setuptools==60.0.0 ``` 上述命令卸载当前版本并重新安装指定版本的 `setuptools`[^4]。 #### 方法二:确保 Packaging 已正确安装 `setuptools.extern.packaging` 实际上是对 `packaging` 模块的一个封装。因此,确认 `packaging` 是否已正确安装非常重要。可以尝试以下方法更新或重装它: ```bash pip install --upgrade packaging ``` #### 方法三:修复 Ubuntu 中的路径问题 如果是基于 Linux (例如 Ubuntu),可能会存在路径中的模块被覆盖或者修改的情况。一种常见的解决方式是在源码中手动调整导入语句。例如,在 `/usr/lib/python3/dist-packages/colcon_python_setup_py/package_identification/python_setup_py.py` 文件中找到第 251 行,并将其改为: ```python from packaging.specifiers import SpecifierSet ``` 这一步骤适用于部分系统环境中因路径问题引发的错误[^5]。 #### 方法四:重建 Conda 虚拟环境 对于 Anaconda 用户来说,虚拟环境管理不当也可能导致此类问题。建议删除现有环境并创建一个新的干净环境后再安装所需软件包: ```bash conda remove --name dgl_env --all conda create --name dgl_env python=3.8 conda activate dgl_env pip install torch torchvision torchaudio dgl ``` 注意选择合适的 Python 版本以及匹配的 CUDA 版本来适配您的硬件条件[^1]。 #### 方法五:验证 GraphBolt 动态库是否存在 根据报错信息提到找不到 `graphbolt_pytorch_2.5.1.dll` 文件,需检查对应位置是否有实际存在的 `.dll` 文件。如果没有,请参照官方文档重新编译或下载预构建好的二进制文件。 --- ### 示例代码片段 为了便于测试以上更改效果,可编写简单的脚本来验证是否成功加载了 DGL: ```python import dgl print(f"DGL version: {dgl.__version__}") ``` --- ### 总结 通过上述五个方面的排查和处理措施,应该能够有效解决 `ModuleNotFoundError: No module named 'setuptools.extern'` 的问题。核心在于保持各组件间良好的兼容性和稳定性,同时注重细节上的微调优化。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值