Добавление дополнительных библиотек в 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']])