Добавление дополнительных библиотек в MODELICAPATH в JModelica

В JModelica я хочу создавать модели, используя компоненты из нескольких существующих библиотек.

Это означает, что было бы очень полезно добавить несколько библиотек в MODELICAPATH, чтобы на компоненты можно было ссылаться без изменения их существующих путей. Нечто подобное кажется возможным в Димоле.

В JModelica 1.13 кажется, что это когда-то было возможно, используя:

c_opts =
    {'extra_lib_dirs':['c:\MyLibs1','c:\MyLibs2']}

compile_fmu(class_path, compiler_options=c_opts)

Я прочитал документ JModelica 2.1, и, похоже, об этом аргументе не говорится. Я также попытался запустить приведенный выше скрипт, и компилятор не может найти путь к модели, содержащейся в библиотеке, указанной в параметрах.

Добавление библиотек в стороннюю MSL-папку внутри установки JModelica не вариант, так как несколько библиотек, с которыми я буду работать, являются репозиториями GitHub.

Можно ли добавить эти несколько библиотек в MODELICAPATH через скрипт запуска или код IPython?

2 ответа

Опция extra_lib_dirs была удалена в пользу более простого интерфейса:

from pymodelica import compile_fmu

name = compile_fmu("MyModel", ["MyModelicaFile.mo", "C:\My\Modelica\Lib", ...])

Список после указания модели может содержать любое количество файлов или каталогов Modelica, в которых расположены библиотеки Modelica.

Да, JModelica.org ищет переменную окружения MODELICAPATH для поиска дополнительных расположений библиотек Modelica (согласно спецификации языка Modelica, раздел 13.2.4).

Либо вы изменяете переменную в пакете перед запуском JModelica.org, либо изменяете среду внутри Python:

import os
os.environ['MODELICAPATH'] = "C:/somePath/;" + os.environ['JMODELICA_HOME'] + "/ThirdParty/MSL"
from pymodelica import compile_fmu
compile_fmu("SomeLibrary.SomeModel")

Обратите внимание, что если вы собираетесь компилировать модели из MSL или модели, использующие части MSL, то вам также необходимо добавить папку MSL из установки JModelica.org в MODELICAPATH. Причина в том, что мы переопределяем дефолт MODELICAPATH и JModelica.org использует MODELICAPATH найти MSL.

Я мог бы добавить, что более эффективно добавлять папки библиотеки в MODELICAPATH чем перечислить их в compile_fmu команда. Причина в том, что если вы перечислите их compile_fmu команда, то все библиотеки будут проанализированы, в то время как, если вы добавите их (или, скорее, родительскую папку) в MODELICAPATH, то они будут загружены по мере необходимости.

В этом ответе используется тот же подход, что и в ответе Джона С., но вместо того, чтобы просто установить переменную Modelicpath env, я предлагаю добавить любой новый каталог к ​​переменной. Вот маленькая функция Python, которую я использовал в прошлом:

def addDirToModelicaPath(DirPath):
    import os
    if os.environ.get('MODELICAPATH') is None:
        os.environ['MODELICAPATH'] = ';'.join([DirPath])
    elif DirPath in os.environ['MODELICAPATH']:
        print("Already on the MODELICAPATH, not doing anything")
    else:
        os.environ['MODELICAPATH'] = ';'.join([DirPath, os.environ['MODELICAPATH']])
Другие вопросы по тегам