gpt4 book ai didi

python - 导入本地包的问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:50:07 30 4
gpt4 key购买 nike

我要将我的大部分 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

在 main.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 添加到 sys.path,但没有帮助。

最佳答案

感谢@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 *"

它允许从包 namespace 中的当前包中的所有 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

关于python - 导入本地包的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21709033/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com