Andrew@ 发表于 2023-8-26 21:59:43

Python 自定义模块跨文件引用

请问为什么这样写会报错呢?

陶远航 发表于 2023-8-26 22:00:00

在Python中,自定义模块之间的跨文件引用需要注意一些规则,否则可能会导致报错。以下是一些常见的导致错误的原因和解决方法:

1. 循环导入:如果两个或多个模块相互导入,形成循环依赖关系,会导致报错。例如,模块A导入了模块B,同时模块B也导入了模块A。

   解决方法:确保模块之间没有循环导入,可以通过重新组织代码结构来避免这种情况发生。

2. 模块未在同一目录或路径下:如果要引用一个模块,但该模块文件不在当前目录或Python解释器的搜索路径中,会导致找不到模块。

   解决方法:确保要引用的模块文件与当前文件在同一目录或添加模块所在目录到Python解释器的搜索路径中。可以使用sys模块中的sys.path.append()来添加搜索路径。

3. 命名冲突:如果不同的模块中定义了相同的名称,例如函数名或变量名,会导致命名冲突。

   解决方法:在引用模块的地方使用完整的模块名来区分不同的定义,或者使用别名(import module as alias)来避免冲突。

4. 语法错误或其他错误:在模块中存在语法错误或其他错误,会导致无法成功引用模块。

   解决方法:检查模块文件中的语法和其他代码错误,并进行修复。

请提供具体的报错信息和相关代码,以便我能够更好地帮助你解决问题。
如果问题已经解决,请设置最佳答案

Andrew@ 发表于 2023-8-26 22:13:02

我这样写,程序就不会报错,只是提示有问题

Andrew@ 发表于 2023-8-26 22:16:31

陶远航 发表于 2023-8-26 22:00
在Python中,自定义模块之间的跨文件引用需要注意一些规则,否则可能会导致报错。以下是一些常见的导致错误 ...

这些问题我都注意到了,我按照后面回复的图片里那种写法,程序就没有出问题,感觉这两种写法没啥区别呀?我也加了__init__.py文件了

isdkz 发表于 2023-8-26 22:31:12

simulator.py第一行改成
from .interface import QuantumDevice, Qubit

Andrew@ 发表于 2023-8-26 22:45:12

isdkz 发表于 2023-8-26 22:31
simulator.py第一行改成

不太行
File "e:\Python_Project\Qpanda_Test\quantum\ch03\qkd.py", line 5, in <module>
    from .interface import QuantumDevice, Qubit
ImportError: attempted relative import with no known parent package

isdkz 发表于 2023-8-26 22:49:09

Andrew@ 发表于 2023-8-26 22:45
不太行
File "e:\Python_Project\Qpanda_Test\quantum\ch03\qkd.py", line 5, in
    from .interfa ...

我是让你改 simulator.py,不是让你改 qkd.py

Andrew@ 发表于 2023-8-26 22:53:19

isdkz 发表于 2023-8-26 22:49
我是让你改 simulator.py,不是让你改 qkd.py

也不行{:5_100:},我再想想其他办法吧

isdkz 发表于 2023-8-26 22:54:19

Andrew@ 发表于 2023-8-26 22:53
也不行,我再想想其他办法吧

你是不是没有把qkd.py改回来?

歌者文明清理员 发表于 2023-8-26 22:55:58

第四行路径改成 ../../quantom/ch02

isdkz 发表于 2023-8-26 22:56:31

我给你个例子吧,执行我这个的qkd.py是不会有问题的:

Andrew@ 发表于 2023-8-26 23:35:22

isdkz 发表于 2023-8-26 22:56
我给你个例子吧,执行我这个的qkd.py是不会有问题的:

好的好的,谢谢,我再试试

Andrew@ 发表于 2023-8-26 23:38:24

isdkz 发表于 2023-8-26 22:31
simulator.py第一行改成

请问这是什么原理呀?

isdkz 发表于 2023-8-26 23:42:55

Andrew@ 发表于 2023-8-26 23:38
请问这是什么原理呀?

去了解一下python的绝对导入和相对导入,这个一两句话讲不清楚,没接触过可能还会有点不好理解,多用就懂了

Andrew@ 发表于 2023-8-26 23:57:48

isdkz 发表于 2023-8-26 23:42
去了解一下python的绝对导入和相对导入,这个一两句话讲不清楚,没接触过可能还会有点不好理解,多用就懂 ...

好的好的,多谢多谢

Andrew@ 发表于 2023-8-27 13:58:38

isdkz 发表于 2023-8-26 23:42
去了解一下python的绝对导入和相对导入,这个一两句话讲不清楚,没接触过可能还会有点不好理解,多用就懂 ...

大佬,我查了一下,发现看的云里雾里的,请问可以推荐一个详细教程吗?

isdkz 发表于 2023-8-27 15:50:17

Andrew@ 发表于 2023-8-27 13:58
大佬,我查了一下,发现看的云里雾里的,请问可以推荐一个详细教程吗?

我不知道有什么比较详细的教程,我当时看的是这个文章:https://iswbm.com/407.html

这个相对导入确实一开始不太好理解,慢慢就懂了

你也可以看一下之前关于相对导入的求助贴:https://fishc.com.cn/search.php?mod=forum&searchid=82&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%CF%E0%B6%D4%B5%BC%C8%EB

Andrew@ 发表于 2023-8-27 17:02:44

isdkz 发表于 2023-8-27 15:50
我不知道有什么比较详细的教程,我当时看的是这个文章:https://iswbm.com/407.html

这个相对导入确实 ...

好的,多谢!
页: [1]
查看完整版本: Python 自定义模块跨文件引用