我刚开始使用python,在理解包内模块加载的搜索路径时遇到了困难。我有这样的结构:
top/ Top-level package
__init__.py Initialize the top package
src/ Subpackage for source files
__init__.py
pkg1/ Source subpackage 1
__init__.py
mod1_1.py
mod1_2.py
...
pkg2/ Source subpackage 2
__init__.py
mod2_1.py
mod2_2.py
...
...
test/ Subpackage for unit testing
__init__.py
pkg1Test/ Tests for subpackage1
__init__.py
testSuite1_1.py
testSuite1_2.py
...
pkg2Test/ Tests for subpackage2
__init__.py
testSuite2_1.py
testSuite2_2.py
...
...
在testSuite1_1中,我需要导入mod1_1.py模块(依此类推)。我应该使用什么导入语句? Python的官方教程(在docs.python.org,第6.4.2)节规定:
如果在当前包(当前模块是其子模块的包)中找不到导入的模块,import语句将查找具有给定名称的顶级模块
我认为这意味着我可以使用(在testSuite1_1.py中):
从钢骨包1导入mod1\U 1
或者
进口钢骨包1.模式1
两者都不起作用。我在这里读了一些类似问题的答案,但找不到答案。在
编辑:我更改了模块名以遵循Python的命名约定。但我还是不能让这个简单的例子起作用。在
模块名不包括
.py
扩展名。另外,在您的示例中,顶层模块实际上命名为top
。最后,连字符对于python中的名称是不合法的,我建议用下划线代替它们。然后尝试:在http://legacy.python.org/doc/essays/packages.html的帮助下解决的问题(在类似的问题中提到)。关键点(对于经验丰富的python开发人员来说很明显)是:
为了让Python程序使用包,必须通过import语句找到该包。换句话说,包必须是位于的目录的子目录搜索路径. […]确保包已打开的最简单方法系统路径要么安装在标准库中,要么让用户扩展系统路径通过设置$PYTHONPATH shell环境变量“
在PYTHONPATH中添加到“top”的路径解决了问题。到使解决方案可移植(这是一个个人项目,但我需要在多台计算机上共享),我想在顶部有一个最小的初始化代码/设置.py应该行得通。在
相关问题 更多 >
编程相关推荐