python – 尝试将* .pyc导入为模块
我有一个
python脚本试图在文件系统中的某个地方导入另一个脚本(路径只在运行时知道).
根据我的理解,我需要使用imp模块,这可能会起作用,但是在加载模块时,我得到的错误是找不到导入模块使用的模块. 下面是代码: importer.py: import imp imp.load_compiled("my_module","full_path_to_my_modulemy_module.pyc") my_module.py: import sys import another_module 当我运行importer.py时,我收到htis错误消息:
这里出了什么问题? 编辑: import imp import sys sys.path.append(full_path_to_my_module) imp.load_compiled("my_module",full_path_to_my_module+my_module) 但我仍然得到同样的错误 也许我做了一些不必要的事情 – 这是我的目标: 解决方法
imp.load_compiled返回已编译的模块对象,它与import语句不同,后者也将模块绑定到名称
import imp my_module = imp.load_compiled("my_module","full_path_to_my_module/my_module.pyc") 然后你可以这样做: my_module.yayfunctions('a') 完成示例会话: $cat /tmp/my_module.py def yayfunctions(a): print a $python -m compileall /tmp/my_module.py $ls /tmp/my_module.py* my_module.py my_module.pyc $python >>> import imp >>> my_module = imp.load_compiled("my_module","/tmp/my_module.pyc") >>> my_module.yayfunctions('a') a 编辑注释(ImportError:没有名为another_module的模块),我假设错误是由my_module.pyc中的代码引起的,而another_module.py位于同一目录中 在这种情况下,正如其他人所建议的那样,将包含my_module的目录添加到sys.path并使用常规导入机制更简单,特别是 这是一个应该做你想做的功能: import os def load_path(filepath): """Given a path like /path/to/my_module.pyc (or .py) imports the module and returns it """ path,fname = os.path.split(filepath) modulename,_ = os.path.splitext(fname) if path not in sys.path: sys.path.insert(0,path) return __import__(modulename) if __name__ == '__main__': # Example usage my_module = load_path('/tmp/my_module.py') my_module.yayfunctions('test') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |