路径管理器
(类来自 pyomo.common.fileutils)
- class pyomo.common.fileutils.PathManager(finder, dataClass)[source]
基础类:
objectPathManager 定义了用于路径位置的注册类
PathManager定义了一个与CachedFactory类非常相似的类;然而它不注册类型构造函数。相反,它注册PathData(或ExecutableData)的实例。这些实例包含注册PathData对象时解析的目录对象的路径。我们不使用 PyUtilib 的register_executable和registered_executable函数,以便我们可以自动在搜索路径中包含 Pyomo 特定的位置(即PYOMO_CONFIG_DIR)。用户通常会通过此类的全局实例与此类进行交互(
pyomo.common.Executable和pyomo.common.Library)。用户不需要或期望向
PathManager注册文件名;它们将在首次使用时自动注册。通常,用户通过path()和available()方法进行交互:>>> from pyomo.common import Executable >>> if Executable('demo_exec_file').available(): ... loc = Executable('demo_exec_file').path() ... print(os.path.isfile(loc)) True >>> print(os.access(loc, os.X_OK)) True
为了方便起见,
available()和path()可以通过将PathData对象从Executable或Library转换为bool或str来使用:>>> if Executable('demo_exec_file'): ... cmd = "%s --help" % Executable('demo_exec_file')
PathManager缓存目标目录条目的位置/存在状态。如果环境中的某些内容发生变化(例如,PATH)或在客户端首次查询位置或可用性后创建或删除了文件,PathManager 将返回不正确的信息。您可以通过调用rehash()来使PathManager刷新其缓存,无论是在PathData(针对单个文件)还是在PathManager上刷新所有文件的缓存:>>> # refresh the cache for a single file >>> Executable('demo_exec_file').rehash() >>> # or all registered files >>> Executable.rehash()
Executable单例在系统的PATH和由pathlist属性指定的目录列表中查找可执行文件。Executable.pathlist默认包含os.path.join(pyomo.common.envvar.PYOMO_CONFIG_DIR, 'bin')的列表。Library单例在系统的LD_LIBRARY_PATH、PATH以及由pathlist属性指定的目录列表中查找可执行文件。Library.pathlist默认包含os.path.join(pyomo.common.envvar.PYOMO_CONFIG_DIR, 'lib')的列表。用户也可以通过显式设置位置来覆盖正常的文件解析,使用
set_path():>>> Executable('demo_exec_file').set_path(os.path.join( ... pyomo.common.envvar.PYOMO_CONFIG_DIR, 'bin', 'demo_exec_file'))
显式设置路径是一个绝对操作,无论该位置是否指向实际文件,都会设置位置。此外,显式位置将在调用
rehash()时保持不变。如果您希望移除显式的可执行文件位置,请调用set_path(None):>>> Executable('demo_exec_file').set_path(None)
Executable单例使用ExecutableData,这是PathData类的扩展形式,它提供了executable属性作为path()和set_path()的别名:>>> loc = Executable('demo_exec_file').executable >>> print(os.path.isfile(loc)) True >>> Executable('demo_exec_file').executable = os.path.join( ... pyomo.common.envvar.PYOMO_CONFIG_DIR, 'bin', 'demo_exec_file') >>> Executable('demo_exec_file').executable = None
方法
__init__(finder, dataClass)rehash()重新查询所有已注册可执行文件的位置
成员文档