我的桌面上有一个文件,其中包含完整路径:
C:\用户\叶夫\桌面\ f.py
但是python是从:
运行的C:\用户\叶夫
问题是,我无法exec(open('f.py').read())
我包含环境变量的第一条路径,但它不起作用。 例如,当我做
时 import f
它完全没问题。
是否可以从另一个目录中运行open(' f.py')而不使用该文件的完整路径?
答案 0 :(得分:1)
open()
是一个在文件系统上打开任何文件的工具。它不是一个查找Python模块的工具。
Python的导入机制相当复杂(可以扩展,调整模块的查找或加载方式),并且开箱即用支持具有不同扩展名(.pyc
,.pyd
的缓存字节码文件,是__bytecache__
目录,是从.zip
文件加载,还是加载本机扩展,所有这些都来自sys.path
上列出的一系列可配置目录。这个机器也允许你覆盖不同版本的模块,只需将它们放在搜索路径上的不同位置。
open()
函数的绝大部分用例都不需要这个机器,你想从桌面打开你的猫图片,而不必担心cat.py
模块在不同的目录中。
您可以使用the importlib.util.find_spec()
module:
from importlib.util import find_spec
module_spec = find_spec('f')
if module_spec is not None:
with open(module_spec.origin) as module_source:
exec(module_source.read())
这确实要求您的Desktop
模块位于sys.path
模块搜索路径上。