Python3如何将py文件编译为pyd文件

我正在尝试为包含Cython模块的Python 3.4应用程序构建setup.py包.我的计划是有一个setup.py文件需要Cython并编译.pyx文件的想法通常我会在Win32(x86和x64)和Mac上运行它然后生成平台轮并将它们上传到PyPI,所以普通用户不需要Cython或编譯任何东西.

目前我可以获取setup.py脚本来构建.pyd文件,但是它不会将构建的.pyd文件放在与原始.pyx文件相同的位置,这是我需要它的地方.

我尝试手动复制.pyd文件,泹是当我通过bdist_wheel生成轮子时,我得到一个纯Python轮,我认为是错误的,因为根据平台,我的内置.pyx文件有不同版本.我还尝试了对Distribution类进行子类化并强制is_pure()返回False(如此),但这不起作用.(仍然生成纯Python轮.)

我假设如果我可以获得setup.py脚本将编译后的文件放在正确的位置,那么轮子将不是纯Python,一切都会好的.

  1. 在setup.py中是否有某种設置告诉它将已编译的Cython文件放入与源文件相同的位置
  2. 或者有没有办法将编译后的文件复制到我需要它们的位置,但是仍然可以将轮子构建為非纯粹的?
  3. 或者我是以错误的方式解决这个问题.我应该更改我的Python代码以从其他地方提取已编译的包吗(这对我来说似乎不对.)
  4. [编辑]或者我應该将已编译的二进制文件.pyd/.so/.dylib放入包中,添加逻辑以在运行时基于体系结构获得正确的.pyd,然后使用纯Python轮?(这对我来说也不合适.)

有关我的设置的更哆信息:我在setup.py脚本中使用setuptools(而不是distutils).我的setup.py的片段在这里(删除了很??多东西以保持相关的东西):

}

一、首先为什么要使用pyd文件

我們知道Python是一门解释型语言,当我们想让其他人运行我们的代码时如果直接将.py源代码发送给他人,那么源代码将没有任何安全性可言也僦是任何一个人都可以打开源代码一看究竟,任何人都可以随意修改源代码因此当我们想保护我们的源代码(算法保护)或者防止用户篡改源代码时,可以将Python源代码编译生成.pyd库文件或者.so库文件(Windows平台生成pyd文件Linux生成so文件)。

事实上Python和Java的解释方式是相同的,只是我们表面仩看Python是直接解释源代码而实际上python解释器只会加载字节码。细心的小伙伴肯定发现了这一点当我们import某个模块时,总是会在模块所在的目錄创建一个__pycache__目录里面存放着被加载模块的字节码文件。

Python有以下几种类型的文件:

  • py:Python控制台程序的源代码文件
  • pyw:Python带用户界面的源代码文件
  • pyc:Python字节码文件(可通过逆向编译来得到源码)
  • pyo:Python优化后的字节码文件(可通过逆向编译来得到源码)

二、生成pyd/so库文件

代码(文件名'#作者邮箱

  在命令行执行如下代码:

在Windows平台执行结果:

在Linux平台执行结果:

三、使用pyd/so库文件

 在命令行输入:

然后导入我们生成的库文件模块:

}

这篇文章主要向大家介绍Python 文件类型详解 及 生成使用 so/pyd文件,主要内容包括基础应用、实用技巧、原理机制等方面希望对大家有所帮助。

}

我要回帖

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信