无法导入python模块
我的项目结构如下:无法导入python模块,python,import,module,package,Python,Import,Module,Package,我的项目结构如下: --base __init__.py mod1.py mod2.py version.py mod1.py: from base.mod2 import classA \uuuu init\uuuuu.py的内容: from .version import __version__ as version __version__ = version class classA: def __init__(self):
--base
__init__.py
mod1.py
mod2.py
version.py
mod1.py:
from base.mod2 import classA
\uuuu init\uuuuu.py的内容
:
from .version import __version__ as version
__version__ = version
class classA:
def __init__(self):
print("hello")
mod2包含一个名为classA的类
在mod1中,我导入classA如下:
--base
__init__.py
mod1.py
mod2.py
version.py
mod1.py:
from base.mod2 import classA
但是我得到一个错误,说“没有名为base的模块”
注意:importmod2
works。但是,我想使用绝对路径方法,但它不起作用。谁能告诉我我做错了什么
EDIT:我正在从base
目录执行python脚本。另外,base
位于sys.path
(刚刚验证)
编辑2:我想以类似的方式导入类。更新3:如果您想从包目录中导入子模块,即
base
,您可以在/modulemod1.py
文件中使用此选项(在导入中省略base
部分)
from mod2 import classA
上述解决方案也适用于run\u test\u 1.py
和run\u test\u 2.py
脚本。希望这有帮助()
更新2:我将通过从test
目录执行python脚本来演示相同的方法
按照与“更新1”相同的结构,在test
目录下创建名为run\u test\u 1.py
的脚本,其内容如下:
from base.mod2 import classA
a = classA()
from base import mod1
mod1.classA()
还可以在test
目录下创建另一个名为run\u test\u 2.py
的脚本,该脚本包含以下内容:
from base.mod2 import classA
a = classA()
from base import mod1
mod1.classA()
从终端评估两个脚本,如下所示
$ cd ~/path/to/test/
$ python run_test_1.py
hello
$ python run_test_2.py
hello
正如所演示的,您应该在终端上获得“hello”的输出
更新1:我在名为test
的目录下为您的包创建了相同的目录结构
-- test
--base
__init__.py
mod1.py
mod2.py
version.py
\uuuu init\uuuu.py
的内容与您的内容相同
from .version import __version__ as version
__version__ = version
mod1.py的内容与您的相同
from base.mod2 import classA
mod2.py的内容
:
from .version import __version__ as version
__version__ = version
class classA:
def __init__(self):
print("hello")
然后使用目录test
中的python
解释器,我测试了以下内容:
>>> from base.mod2 import classA
>>> a = classA()
hello
如果您确定base
目录位于sys.path
中,则可以尝试此操作
从基本导入mod2
另外,我建议您将base
更改为对您的项目更具信息性的内容
编辑:我还建议您查看Python网站上的,其中还讨论了如何加载子模块。看看这一点非常有用。但我不想使用文件的完整路径。我想尝试在Python3中实现类似于base import.mod2的,感谢您的回答。看来你的问题搞错了。我对问题进行了编辑以使其更清楚。@James您是否尝试从ipython
的父目录调用它,或者甚至从另一个目录调用它,因为它已经在路径中?我没有使用ipython
,但我是从base
目录调用它。好的,没问题,您是否尝试过从其他目录呼叫,并再次检查base
目录是否位于sys.path
中。