为什么在python中打开()不使用像导入一样的windows环境变量

时间:2017-04-07 06:39:55

标签: python python-3.x

我的桌面上有一个文件,其中包含完整路径:

  

C:\用户\叶夫\桌面\ f.py

但是python是从:

运行的
  

C:\用户\叶夫

问题是,我无法exec(open('f.py').read())

我包含环境变量的第一条路径,但它不起作用。 例如,当我做

import f它完全没问题。

enter image description here

是否可以从另一个目录中运行open(' f.py')而不使用该文件的完整路径?

1 个答案:

答案 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模块搜索路径上。