如何通过路径导入 python 文件?
How do I import a python file through a path?
我正在努力让它在运行时运行列表中的最新版本。
这是我要的目录:
ClockOS:
bootLoader.py (the file I am starting at)
Versions:
Version 0.1.1:
main.py (Ignore because tis an older version)
Version 0.1.2:
main.py (The one I want to run/import)
我尝试通过 os.dir
加载,并使用 sys.path
,并添加一个空的 __init__.py
任何人都知道如何让这个工作?
我的代码:
import os
import re
import sys
versionList = []
for filename in os.listdir('Versions'):
if filename.startswith('Version'):
versionList.append(filename)
print(f"Loaded {filename}")
def major_minor_micro(version):
major, minor, micro = re.search('(\d+)\.(\d+)\.(\d+)', version).groups()
return int(major), int(minor), int(micro)
latest = str(max(versionList, key=major_minor_micro))
print("Newest Version: ", latest)
os.path.dirname('Versions/'+str(latest))
sys.path.insert(1, latest)
print(sys.path)
import main
最后,如果可能的话,我需要它在 windows 和 linix 上都能工作。
你需要使用 importlib
来做你想做的事。以下是如何从文件导入 my_function
的示例:
import importlib
spec = importlib.util.spec_from_file_location('some_module_name', filename)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
mod.my_function(1)
问题可能与 Import arbitrary python source file. (Python 3.3+)
重复
我正在努力让它在运行时运行列表中的最新版本。
这是我要的目录:
ClockOS:
bootLoader.py (the file I am starting at)
Versions:
Version 0.1.1:
main.py (Ignore because tis an older version)
Version 0.1.2:
main.py (The one I want to run/import)
我尝试通过 os.dir
加载,并使用 sys.path
,并添加一个空的 __init__.py
任何人都知道如何让这个工作?
我的代码:
import os
import re
import sys
versionList = []
for filename in os.listdir('Versions'):
if filename.startswith('Version'):
versionList.append(filename)
print(f"Loaded {filename}")
def major_minor_micro(version):
major, minor, micro = re.search('(\d+)\.(\d+)\.(\d+)', version).groups()
return int(major), int(minor), int(micro)
latest = str(max(versionList, key=major_minor_micro))
print("Newest Version: ", latest)
os.path.dirname('Versions/'+str(latest))
sys.path.insert(1, latest)
print(sys.path)
import main
最后,如果可能的话,我需要它在 windows 和 linix 上都能工作。
你需要使用 importlib
来做你想做的事。以下是如何从文件导入 my_function
的示例:
import importlib
spec = importlib.util.spec_from_file_location('some_module_name', filename)
mod = importlib.util.module_from_spec(spec)
spec.loader.exec_module(mod)
mod.my_function(1)
问题可能与 Import arbitrary python source file. (Python 3.3+)
重复