如何在python中的不同目录中的模块内部导入模块?

时间:2019-05-23 14:31:41

标签: python python-3.x python-import

我的目录结构如下:

# program.py

user_input_celsius = input('Enter temp in Celsius ')    
user_input_celsius = int(user_input_celsius)
celsius_values = []    
celsius_values = celsius_values + [user_input_celsius]    
fahrenheit_values = []
for celsius in celsius_values:
         fahrenheit = celsius * 1.8 + 32    
     fahrenheit_values = fahrenheit_values + [fahrenheit]    
print(fahrenheit_values, end ='')

input("Press enter to exit")
exit()

假设:  /another_path/ script.py /path/1 model.py /path/2 toolbox.py model.py 包含以下内容:

/path/1/model.py

class MyClass: pass 包含以下内容:

/path/2/model.py

import toolbox.py class MyClass: pass 中,我想创建2个script.py实例,每个实例对应于其路径。

我见过this question,但看来模块MyClass已被弃用。

我也看到了this问题。 根据模块的完整路径,加载模块的最佳解决方案 这个问题看起来像这样:

imp

当我尝试导入import importlib.util spec = importlib.util.spec_from_file_location("module.name", "/path/to/file.py") foo = importlib.util.module_from_spec(spec) spec.loader.exec_module(foo) foo.MyClass() 时,此解决方案效果很好, 但失败,并显示错误/path/1/model.py 当我尝试使用ModuleNotFoundError: No module named 'toolbox'

的相同方法时

另一种可能性:

/path/2/model.py

也失败,并显示错误sys.path.append('/path/') from 2.model import *

  

编辑1:   ModuleNotFoundError: No module named 'toolbox'中的os.chdir("/path/2/")解决了这个问题。

     

Edit2:    据我了解@Mad Physicist评论中提到的this问题的答案,他建议的解决方案是将script.py中的所有定义放入toolbox.py中,然后放入{{1} }。

     

该解决方案解决了导入问题,但导致/path/2/model.py的源代码可读性较差,并且不能推广到在from 2.model import *中要加载位于同一目录中的文件的情况

     

实际上,os.chdir正是我所需要的。

     

Edit3:   我使用Jupyter笔记本调试代码并在Shell中运行。   相同的代码在Jupyter笔记本中完全可以正常运行,但在终端中失败。

此问题是否存在任何规范的解决方案?

0 个答案:

没有答案