导入本地包时遇到问题

2024-06-17 17:41:54 发布

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

我将把我的python代码的一大块重新组织成一个包。我想这个包将保存在主代码所在的同一个目录中。因此,整个结构如下所示:

project directory
\-mymod
  \-__init__.py  # totaly empty
  \-xsum.py      # with xsum function
\-main.py        # main program

因为这只是一个例子

#xsum.py
def xsum(a,b):
  "just xsum"
  return a+b

在里面主.py地址:

#main.py
import mymod
print mymod.xsum.xsum(2,3)

Python返回错误:

Traceback (most recent call last):
  File "main.py", line 3, in <module>
    print mymod.xsum.xsum(2,3)
AttributeError: 'module' object has no attribute 'xsum'

我尝试将项目目录和/或项目目录/mymod添加到搜索路径,但没用。你知道吗


Tags: 项目代码py目录projectinitmain结构
1条回答
网友
1楼 · 发布于 2024-06-17 17:41:54

感谢@doukremt(见上文讨论)我找到了非常简单的解决方案: 在__init__.py中插入代码

import sys,os
for filename in os.listdir(os.path.dirname(__file__)):
        if filename[-3:] != ".py" or filename == "__init__.py" : continue
        exec "from "+filename[:-3]+" import *"

它允许在包名称空间中导入当前包中所有py文件的所有名称。所以用法很简单:

import mymod
mymod.xsum(2,3)

如果希望在不同的名称空间中使用不同的模块名称,请使用__init__.py中的下一个代码: 导入系统,操作系统

for filename in os.listdir(os.path.dirname(__file__)):
        if filename[-3:] != ".py" or filename == "__init__.py" : continue
        exec "import "+filename[:-3]

在这种情况下,应指定子模块:

import mymod
mymod.xsum.xsum(2,3)

最后,如果您只想导入目录中的几个文件,请列出并导入它们:

import sys,os
__all__=["a","b","c","xsum"]
for filename in __all__:
        exec "import "+filename

相关问题 更多 >