正在导入文件夹中的 Python 个文件
Importing Python files that are in a folder
我一直在开发一个项目,该项目创建自己的 .py 文件来存储方法的处理程序,我一直在尝试弄清楚如何将 Python 文件存储在文件夹中并打开它们.这是我用来创建文件的代码,如果它们尚不存在,然后导入文件:
if os.path.isfile("Btn"+ str(self.ButtonSet[self.IntBtnID].IntPID) +".py") == False:
TestPy = open("Btn"+ str(self.ButtonSet[self.IntBtnID].IntPID) +".py","w+")
try:
TestPy.write(StrHandler)
except Exception as Error:
print(Error)
TestPy.close()
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Btn" + str(self.IntBtnID))
self.IntBtnID += 1
当我更改此行时:
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Btn" + str(self.IntBtnID))
对此:
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Buttons\Btn" + str(self.IntBtnID))
找不到填充并最终抛出错误,因为它无法在文件夹中找到文件。
知道为什么它不起作用我只是不知道如何解决这个问题:/
我的问题是如何打开存储在文件夹中的 .py?
您的代码中有一些不合常理的地方可能是导致您出现问题的原因。首先,一般使用os.path
中的函数来操作文件路径比较好。从您的反斜杠用法来看,您似乎正在处理 Windows,但 os.path
模块可确保跨所有平台的行为一致。
还有importlib.import_module
,通常比__import__
更推荐。此外,如果您想在程序的生命周期内多次加载生成的模块,则必须使用 imp.reload
.
明确地执行此操作
最后一个提示:我会考虑模块路径以避免必须在多个地方更改它。
导入文件时不能引用路径目录。相反,您想将目录添加到 path
,然后导入模块的名称。
import sys
sys.path.append( "Buttons" )
__import__("Btn"+str(self.IntBtnId))
有关详细信息,请参阅 this so question。
__import__()
函数的第一个参数是模块的名称,而不是它的路径。因此我认为你需要使用:
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Buttons.Btn" + str(self.IntBtnID))
您可能还需要在 Buttons
文件夹中放置一个空的 __init__.py
文件,以表明它是一个模块包。
我一直在开发一个项目,该项目创建自己的 .py 文件来存储方法的处理程序,我一直在尝试弄清楚如何将 Python 文件存储在文件夹中并打开它们.这是我用来创建文件的代码,如果它们尚不存在,然后导入文件:
if os.path.isfile("Btn"+ str(self.ButtonSet[self.IntBtnID].IntPID) +".py") == False:
TestPy = open("Btn"+ str(self.ButtonSet[self.IntBtnID].IntPID) +".py","w+")
try:
TestPy.write(StrHandler)
except Exception as Error:
print(Error)
TestPy.close()
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Btn" + str(self.IntBtnID))
self.IntBtnID += 1
当我更改此行时:
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Btn" + str(self.IntBtnID))
对此:
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Buttons\Btn" + str(self.IntBtnID))
找不到填充并最终抛出错误,因为它无法在文件夹中找到文件。
知道为什么它不起作用我只是不知道如何解决这个问题:/
我的问题是如何打开存储在文件夹中的 .py?
您的代码中有一些不合常理的地方可能是导致您出现问题的原因。首先,一般使用os.path
中的函数来操作文件路径比较好。从您的反斜杠用法来看,您似乎正在处理 Windows,但 os.path
模块可确保跨所有平台的行为一致。
还有importlib.import_module
,通常比__import__
更推荐。此外,如果您想在程序的生命周期内多次加载生成的模块,则必须使用 imp.reload
.
最后一个提示:我会考虑模块路径以避免必须在多个地方更改它。
导入文件时不能引用路径目录。相反,您想将目录添加到 path
,然后导入模块的名称。
import sys
sys.path.append( "Buttons" )
__import__("Btn"+str(self.IntBtnId))
有关详细信息,请参阅 this so question。
__import__()
函数的第一个参数是模块的名称,而不是它的路径。因此我认为你需要使用:
self.ButtonSet[self.IntBtnID].ImpHandler = __import__("Buttons.Btn" + str(self.IntBtnID))
您可能还需要在 Buttons
文件夹中放置一个空的 __init__.py
文件,以表明它是一个模块包。