一个轻量级框架,它支持将Python3.x代码打包为cosimulation fmu。

pythonfmu的Python项目详细描述


Python

A lightweight framework that enables the packaging of Python 3 code or CSV files as co-simulation FMUs (following FMI version 2.0).

License: MITcontributions welcome

CIPyPIConda Version

Gitter

如何从python代码构建FMU?

  1. 安装pythonfmu包:
pip install pythonfmu
  1. 创建一个扩展在pythonfmu.fmi2slave模块中声明的Fmi2Slave类的新类(参见下面的示例)。在
  2. 运行pythonfmu build创建fmu。在
^{pr2}$

如何从具有第三方依赖关系的python代码构建FMU?

Python脚本通常依赖于非内置库,如numpyscipy等。 ^{emu}FMU中没有完整的包。 但是,您可以按照以下步骤在FMU中打包requirements.txtenvironment.yml文件:

  1. 安装pythonfmu包:pip install pythonfmu
  2. 创建一个扩展在pythonfmu.fmi2slave模块中声明的Fmi2Slave类的新类(参见下面的示例)。在
  3. 创建一个requirements.txt文件(使用pip管理器)和/或environment.yml文件(使用conda管理器)。在
  4. 运行pythonfmu build -f myscript.py requirements.txt创建包含依赖项文件的fmu。在

使用pythonfmu deploy,最终用户将能够更新他们的本地Python环境。实现这一目标的步骤:

  1. 安装pythonfmu包:pip install pythonfmu
  2. 请确保处于要更新的Python环境中。然后执行pythonfmu deploy -f my.fmu
usage: pythonfmu deploy [-h] -f FMU [-e ENVIRONMENT] [{pip,conda}]

Deploy a Python FMU. The command will look in the `resources` folder for one of the following files:
`requirements.txt` or `environment.yml`. If you specify a environment file but no package manager, `conda` will be selected for `.yaml` and `.yml` otherwise `pip` will be used. The tool assume the Python environment in which the FMU should be executed is the current one.

positional arguments:
  {pip,conda}           Python packages manager

optional arguments:
  -h, --help            show this help message and exit
  -f FMU, --file FMU    Path to the Python FMU.
  -e ENVIRONMENT, --env ENVIRONMENT
                        Requirements or environment file.

示例:

编写脚本

frompythonfmuimportFmi2Causality,Fmi2Slave,Boolean,Integer,Real,StringclassPythonSlave(Fmi2Slave):author="John Doe"description="A simple description"def__init__(self,**kwargs):super().__init__(**kwargs)self.intOut=1self.realOut=3.0self.booleanVariable=Trueself.stringVariable="Hello World!"self.register_variable(Integer("intOut",causality=Fmi2Causality.output))self.register_variable(Real("realOut",causality=Fmi2Causality.output))self.register_variable(Boolean("booleanVariable",causality=Fmi2Causality.local))self.register_variable(String("stringVariable",causality=Fmi2Causality.local))defdo_step(self,current_time,step_size):returnTrue

创建FMU

pythonfmu build -f pythonslave.py myproject

在这个例子中,一个名为PythonSlave的python类扩展了Fmi2Slave,它在一个名为pythonslave.py的文件中声明, 其中myproject是一个可选文件夹,其中包含python脚本所需的其他项目文件。 这样的项目文件夹将递归地复制到FMU中。可以添加多个项目文件/文件夹。在

在线测试

Binder

PythonFMU没有捆绑Python,这使得它成为一个工具耦合解决方案。 这意味着您不能期望生成的FMU在不同的系统上工作(该系统需要兼容的Python版本和库)。 Python的二进制文件的使用是有限的,但是它的二进制文件的使用限制了Windows的使用 兼容任何python3环境。如果需要为特定配置编译包装器, 您需要CGED和C++编译器。在Linux和Windows上构建包装器的命令可以在中看到 GitHub workflow。在

PythonFMU不会自动解析第三方依赖关系。如果您的代码包括numpy,那么目标系统也需要安装numpy。在


您愿意用Java构建fmu吗?退房FMI4j
需要分发你的FMU吗?FMU-proxy救人!在

学分

这项工作之所以能够实现,是因为来自NTNU-IHB的@markaren和来自Safran SA的@fcollonval的贡献。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
ArrayList中实体对象上的JAVA泛型   带Redis的爪哇芹菜vs单用Redis   java在设备面向横向时隐藏标题栏/通知栏   java JXTreeTable:如何使用ComponentProvider为一列设置渲染器   java创建异常的成本与记录异常的成本相比   java在方法参数中使用setter传递新对象   java在一个类中的方法与另一个类中的方法交互时遇到问题   java如何迭代2个大小相等的ArrayList   Java getDesktop()。open在Windows中工作,但在Mac中不工作   从tomcat切换到jetty后的java“无法启动嵌入式容器”,Spring引导   java如何使用void方法   java如何在解组时在JAXB的ValidationEventHandler中获取节点值?   如何使用Akka Java API创建不响应的TCP接收器   JavaScriptjQuery在java中将记录上传到数据库时的进度条   如何在重新绘制时在java小程序中显示上一个图像