我的问题可以概括如下。你知道吗
我有以下文件结构:
<path>/
- a.py
<path>/subdir/
- b.py
- c.py
关系是a导入b,b导入c(a->;b->;c)。你知道吗
更确切地说,每个文件的内容如下:
def foo():
print("Hello World!")
import c
def fie():
c.foo()
print("Second Hello World!")
if __name__=="__main__":
fie()
from subdir import b
b.fie()
我想要的是调用a.py将打印这些字符串,即:
$ python3 a.py
Hello World!
Second Hello World!
$
从/subdir调用b.py将打印相同的内容:
$ cd subdir
$ python3 b.py
Hello World!
Second Hello World!
$
相反,如果我从<path>
调用a.py,我有:
$ python3 a.py
Traceback (most recent call last):
File "a.py", line 1, in <module>
from subdir import b
File "<path>/subdir/b.py", line 1, in <module>
import c
ModuleNotFoundError: No module named 'c'
$
相反,如果我从<path>/subdir
调用b.py,我就有了预期的行为:
$ cd subdir
$ python3 b.py
Hello World!
Second Hello World!
$
如果我按以下方式更改b.py:
from subdir import c
def fie():
c.foo()
print("Second Hello World!")
if __name__=="__main__":
fie()
a.py的调用按预期工作,但这次是b.py的调用,它给出了ModuleNotFoundError
:
$ cd subdir
$ python3 b.py
Traceback (most recent call last):
File "b.py", line 1, in <module>
from subdir import c
ModuleNotFoundError: No module named 'subdir'
$
奇怪的是,即使是来自<path>
的调用也会产生同样的错误:
$ python3 subdir/b.py
Traceback (most recent call last):
File "b.py", line 1, in <module>
from subdir import c
ModuleNotFoundError: No module named 'subdir'
$
如果替换b.py中的以下字符串:
from subdir import c
在
from . import c
我的效果和上次测试完全一样。你知道吗
在实际场景中,b和c都是subdir中自包含的库的一部分,该库既可以直接使用(使用if __name__
技巧),也可以从其他任何地方导入以使用它们的函数。
所说的库目前不能安装在文件系统的固定空间中(或者至少我不应该依赖于此)。你知道吗
我在使用Python2.6时从来没有遇到过这样的问题,最近我正在迁移到Python3.x。阅读Python3.x导入指南很有帮助,但我没有找到任何有用的信息来解决这个问题,这应该是非常基本的(这就是为什么我认为我忽略了一些琐碎的东西)。你知道吗
您能建议一种方法来更改[a,b,c].py文件中的任何一个以覆盖这个用例吗?你知道吗
以下是我的作品(至少在Windows下)。你知道吗
通过调用
addpath
启动主程序,将目录(作为字符串)或目录(作为字符串列表)作为参数,您希望应用程序可以访问这些目录:我的目录结构如下: C:\Users\G1\Desktop\Test目录
a.py公司
b.py公司
c.py公司
输出:
必须附加modulec.py的路径
以上代码也在python3和python2中进行了测试。你知道吗
相关问题 更多 >
编程相关推荐