我的目录结构如下:
# 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笔记本中完全可以正常运行,但在终端中失败。
此问题是否存在任何规范的解决方案?