Python3模块布局和导入方法在哪里定义?

2024-05-16 21:41:45 发布

您现在位置:Python中文网/ 问答频道 /正文

具有以下模块布局:

/path/in/pythonpath/
  mymodule/
    __init__.py
    _mymodule-cpython-37m-darwin.so

在Python 2.7中,_init__.py可以导入。如下所示:

import _mymodule

但在Python3.7中,我发现除非我将mymodule目录添加到PYTHONPATH中,否则找不到_mymodule:

PYTHONPATH=/path/in/pythonpath:/path/in/pythonpath/mymodule

我发现在系统上安装的类型化\u ast模块中使用了这种方法:

...site-packages/typed_ast/
  __init__.py
  ast3.py
  _ast3.cpython-37m-darwin.so

其中ast3.py导入_ast3如下:

from typed_ast import _ast3
from typed_ast._ast3 import *

使用mymodule遵循此模型也可以工作,而无需修改PYTHONPATH:

from mymodule import _mymodule
from mymodule._mymodule import *

我的问题是什么改变了,“mymodule”的正确做法是什么?这个定义在哪里?我发现在PEPs或Python文档中没有明确介绍这一点。我怀疑这在一些模块文档中是隐含的,我错过了它


Tags: 模块pathinfrompyimportinitast
1条回答
网友
1楼 · 发布于 2024-05-16 21:41:45

最初的问题陈述不正确

在Python 2.7中,我使用的模块有一个Python27目录,其中包含_mymodule.so:

Python27/
    _mymodule.so

它明确地将Python27添加到路径中。因此,Python3找不到模块也就不足为奇了,因为子目录被删除了,版本命名方案被应用于.So文件

至于两个import语句。这两个都不是必需的,除非您希望能够直接访问_mymodule函数以及前缀为_mymodule的函数。这通常是因为遗留的原因

我的问题的答案是:你问错了问题,因为你错误地描述了问题,你想要的是:

from mymodule._mymodule import *

相关问题 更多 >