为了账号安全,请及时绑定邮箱和手机立即绑定

更改目录后找不到模块

更改目录后找不到模块

慕尼黑5688855 2022-05-24 16:17:44
所以我必须创建一个运行文件夹,即一个包含一堆我需要运行的python文件的文件夹。我可以轻松创建此文件夹,并且所有文件都在那里。但是,当我尝试使用 运行文件时importlib,python 不会找到它。我想确保运行的代码实际上是运行文件夹代码,因此我将目录更改为运行文件夹的位置。abs_path = os.path.abspath("{}".format(run_location))os.chdir(abs_path)files = [f for f in os.listdir('.') if os.path.isfile(f)]print(files)try:    driver_module = importlib.import_module("main_driver.py")    driver_module.main(config, logger)except Exception as e:    logger.error("error", str(e))    finish_fail(config, logger)finish_success(config, logger)在上面的例子中,我只想运行main_driver.py. 上面的输出是:['PrepareDataframe.py', 'categorical_encoding.py', 'extra_files.zip', 'build_features.py', 'spot_extractor.py', 'dev.ini', 'featuriser.py', 'main_driver.py', 'time_features_extract.py']显然,main_driver.py在当前工作目录中,但我收到此错误。No module named 'main_driver'追溯:Traceback (most recent call last):  File "./utils/submit.py", line 292, in <module>    driver_module = importlib.import_module("main_driver")  File "/usr/local/Cellar/python/3.7.4_1/Frameworks/Python.framework/Versions/3.7/lib/python3.7/importlib/__init__.py", line 127, in import_module    return _bootstrap._gcd_import(name[level:], package, level)  File "<frozen importlib._bootstrap>", line 1006, in _gcd_import  File "<frozen importlib._bootstrap>", line 983, in _find_and_load  File "<frozen importlib._bootstrap>", line 965, in _find_and_load_unlockedModuleNotFoundError: No module named 'main_driver'
查看完整描述

1 回答

?
POPMUISE

TA贡献1765条经验 获得超5个赞

这似乎是一个PYTHONPATH问题。

当您运行 Python 交互式解释器时,其中的第一项sys.path是一个空字符串,这实际上表示“当前目录”。所以任何时候你尝试导入一个模块,它都会首先在当前目录中查找。

但是,如果您运行python myscript.py,情况并非如此——其中的第一项sys.path是您在运行脚本时所在的实际目录。因此,如果您使用os.chdir()更改当前目录,则新的当前目录不在 中sys.path,因此import_module('foo')会因为找不到而失败。

如果您想模仿始终在当前目录中查找模块的交互式 python 行为,请添加sys.path.insert(0, '')到您的脚本中。


查看完整回答
反对 回复 2022-05-24
  • 1 回答
  • 0 关注
  • 77 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信