路径管理器

(类来自 pyomo.common.fileutils)

class pyomo.common.fileutils.PathManager(finder, dataClass)[source]

基础类:object

PathManager 定义了用于路径位置的注册类

PathManager 定义了一个与 CachedFactory 类非常相似的类;然而它不注册类型构造函数。相反,它注册 PathData(或 ExecutableData)的实例。这些实例包含注册 PathData 对象时解析的目录对象的路径。我们不使用 PyUtilib 的 register_executableregistered_executable 函数,以便我们可以自动在搜索路径中包含 Pyomo 特定的位置(即 PYOMO_CONFIG_DIR)。

用户通常会通过此类的全局实例与此类进行交互(pyomo.common.Executablepyomo.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 对象从 ExecutableLibrary 转换为 boolstr 来使用:

>>> 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_PATHPATH 以及由 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)[source]

方法

__init__(finder, dataClass)

rehash()

重新查询所有已注册可执行文件的位置

成员文档

rehash()[source]

重新查询所有已注册可执行文件的位置

此方法的名称来源于同名的csh命令,该命令重建通过PATH可访问的可执行文件的哈希表。