我想通过运行文件driver.py
来跟踪调用的函数序列。该文件位于另一个目录中,我用来跟踪使用driver.py
时调用的函数的脚本位于另一个(不同)目录中。当我转到driver.py
目录并在终端中运行它时,它运行良好。但是,当我从Python脚本(用于生成函数序列的脚本)中运行相同的函数时,我会得到No module found error
s作为driver.py进行的导入。条件是,我根本不能改变driver.py
这是我的文件结构:
/Users/aviralsrivastava/dev/generate_uml/generate_ruml.py
(A)调用/Users/aviralsrivastava/dev/generate_uml/generate_sequence_diagram.py
(B)中导入/Users/aviralsrivastava/Desktop/source_code_to_study/driver.py
(驱动程序)的函数
这是A如何称呼B的:
generate_sequence_diagram = GenerateSequenceDiagram('/Users/aviralsrivastava/Desktop/source_code_to_study/driver.py')
called_functions = generate_sequence_diagram.get_called_functions('main_2')
这就是B的样子:
from trace import Trace
import importlib
# from driver import main_2
import os
class GenerateSequenceDiagram:
def __init__(self, driver_module):
# self.driver_module = __import__(driver_module)
print('inside init of gen seq diag, dir is: {}'.format(os.getcwd()))
# self.driver_module = importlib.import_module(driver_module)
self.driver_module_spec = importlib.util.spec_from_file_location('driver', driver_module)
self.driver_module = importlib.util.module_from_spec(self.driver_module_spec)
def get_called_functions(self, driver_function):
self.driver_module_spec.loader.exec_module(self.driver_module)
self.driver_function = getattr(self.driver_module, driver_function)
self.driver_function()
# print(dir(self.driver_function))
# print(self.driver_function.__name__)
tracer = Trace(countfuncs=1)
tracer.run('{}()'.format(self.driver_function.__name__))
results = tracer.results()
called_functions = results.calledfuncs
return called_functions
# ob = GenerateSequenceDiagram('driver')
# print(ob.get_called_functions('main_2'))
这就是驱动程序的外观:
# from .source_code_to_study import car, transport, vehicles
import sys
# sys.path.insert(0, '/Users/aviralsrivastava/dev/source_code_to_study')
import car, vehicles, transport
# def main():
# tractor_pollution_permit = transport.TractorPollutionPermit()
# tractor_pollution_permit.fetch_tractor(2018, True)
# tractor_pesticides = transport.TractorPesticides()
# tractor_pesticides.fetch_pesticides_permit(11)
# car_ = car.Car(model='Tesla')
# car_.pollution_permit(20000)
# bike = car.Bike('Harley', 2019)
# bike.pollution_permit(200000)
# bike.check_farzi()
def main_2():
print('Inside main_2 func')
car_ = car.Car(model='Tesla')
car_.pollution_permit(20000)
bike = car.Bike('Harley', 2019)
bike.pollution_permit(200000)
bike.check_farzi()
# tractor_pollution_permit = transport.TractorPollutionPermit()
# tractor_pollution_permit.fetch_tractor(2018, True)
# tractor_pesticides = transport.TractorPesticides()
# tractor_pesticides.fetch_pesticides_permit(11)
main_2()
存储driver.py的目录的内容包括:
.
├── car.py
├── driver.py
├── transport.py
└── vehicles.py
0 directories, 4 files
由于这似乎是一件非常重要的事情,因此在目录中添加需要导入到
sys.path
的文件似乎是一个足够合理的解决方案相关问题 更多 >
编程相关推荐