python - 无法导入 python 模块
问题描述
我的项目结构是这样的:
--base
__init__.py
mod1.py
mod2.py
version.py
内容__init__.py
:
from .version import __version__ as version
__version__ = version
mod2 包含一个名为 classA 的类。
在 mod1 中,我正在像这样导入 classA:
mod1.py:
from base.mod2 import classA
但是,我收到一条错误消息,提示“没有名为 base 的模块”。
注意:import mod2
有效。但是,我想使用绝对路径的方法,但它不起作用。谁能告诉我我做错了什么?
编辑:我正在从base
目录执行 python 脚本。此外,base
在sys.path
(刚刚验证)。
编辑 2: 我想以类似的方式导入类。
解决方案
更新3:如果你想从包目录中导入一个子模块,你可以在文件/模块中base
使用它(省略导入中的部分) ,base
mod1.py
from mod2 import classA
上述解决方案也适用于run_test_1.py
和run_test_2.py
脚本。希望这会有所帮助=)
更新 2test
:我将通过从目录执行 python 脚本来演示相同的方法,
在与“UPDATE 1”结构相同的目录下创建一个名为的脚本,其内容run_test_1.py
如下:test
from base.mod2 import classA
a = classA()
还要run_test_2.py
在test
目录下创建第二个脚本,其内容如下:
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
的内容和__init__.py
你的一样。
from .version import __version__ as version
__version__ = version
的内容和mod1.py
你的一样,
from base.mod2 import classA
内容mod2.py
:
class classA:
def __init__(self):
print("hello")
然后使用python
目录中的解释器test
,我测试了以下内容,
>>> from base.mod2 import classA
>>> a = classA()
hello
如果您确定该base
目录在目录中,sys.path
那么您可以试试这个,
from base import mod2
另外我建议您更改base
为您的项目提供更多信息的东西。
编辑:我还建议您查看 Python 网站上的“包”文档,该文档还讨论了如何加载子模块。
推荐阅读
- r - 使用 `cbind()` 时,“相同”输入会触发不同的行为:从短变量中找到行名并已被丢弃
- javascript - Node.js ReadStream 在管道到 Hash 时卡在 Electron 上
- php - 自动包括定义('BASEPATH')或退出('不允许直接脚本访问');
- python - 类型错误:barh() 为参数“宽度”获取了多个值
- if-statement - 在 Google 表格中计算折线图的斜率时反转列
- php - 如何从生成的 json 中获取单独的键和值?
- express - 尝试使用 express 中间件来服务第三方 API 请求
- javascript - 如何自动为已经结构化的图片库制作动画?
- python - re.findall 只返回最后一场比赛
- r - R中的向量,使用两个向量中的分量来创建一个新向量