IronPython 将python源码编译成dll,用python调用报错ImportError: dynamic module does not define...

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IronPython 将python源码编译成dll,用python调用报错ImportError: dynamic module does not define...相关的知识,希望对你有一定的参考价值。

报错是importError: dynamic module does not define init function (initmyjz)

ironpython几乎没有用过。原来它还有这个功能。我过去是使用python的c语言扩展方式生成动态库。

最近我习惯使用cython。python主要在linux下使用。在windows下反而别扭。ironpython主要应该是使用.net吧。如同jython一样,它不能算是python了。除了语法。

看到孟羽然的回答。原来在ironpython里不是使用__init__.py而是通过入口函数init....()

不过看你的提示,似乎是两个原因:
1.你编译的dll版本与python版本不对。一个是32位,一个是64位(可能性小)
2.你的动态库不在当前目录里(可能性中等)
3.结尾不是pyd,而是dll(这个我不确认)
4.动态库不符合ironpython规范,这一点倒是与孟羽然的回答有些接近(可能性大)
参考技术A 如果你要制作一个python module名为myjz,那么就必须定义一个module入口函数:initmyjz()追问

请问入口函数有什么特殊格式或要求么?

追答

Python 3.X扩展的入口函数签名如下:
PyMODINIT_FUNC PyInit_xxxxxxx(void); // 其中xxxxxxx是module名,必须保持一致
详见:http://docs.python.org/3/extending/

Python 2.X扩展的入口函数签名如下:
PyMODINIT_FUNC initxxxxxxx(void) // 其中xxxxxxx是module名,必须保持一致
详见:http://docs.python.org/2/extending/

追问

能不能给个简单的例子?先谢谢啦!我现在只会用PYTHON其他语言都不会!我查看你指定的路径下文档,扩展好像是用C写的,可是IRONPYTHON是直接将PYTHON编译成DLL的,不太明白!

本回答被提问者采纳

python编程基础之一

编译:将全部代码转成二进制可执行文件

速度快,

c,c++等

解释:一行一行的将代码解释

速度慢

python,php等

python简介:Guido van Rossum 1989年

常用的python解释器:

     cpython  ---最广泛

     jpython  ---java

     ironpython

     pypy  -----支持JIT技术(即时编译)

python的特点:

      1、解释性语言------不编译,解释一行,运行一行

      2、交互式语言------直接互动

      3、面向对象语言

      4、跨平台语言

      5、适合初学者

python的优点:

      简单易学,可移植,可扩展,可嵌入,丰富标准库,支持各种主流数据库,支持GUI编程(图形化界面)

python应用:web后端开发,网络爬虫,人工智能,自动化运维,网络编程

       

以上是关于IronPython 将python源码编译成dll,用python调用报错ImportError: dynamic module does not define...的主要内容,如果未能解决你的问题,请参考以下文章

C# 和 Python 使用 Revit API 的对比

Python

Python基础——运行机理

PEP8风格和python版本区别

如何利用ILSPY反编译工具重建C#NETWeb源码解决方案

python编程基础之一