有没有大佬知道python有什么可以编译dll的库吗

最近一直在探索python技术
直到我发现了dll这个东西,我对他很感兴趣,但是大部分dll都是使用C/C++制作的,我想知道python有没有可以制作dll的库

感谢

Jason990420
最佳答案

jennaweng0621.pixnet.net/blog/post...

将py文件档转成pyd文件档(DLL)

python程式目前可采用的副档名有.py、.pyc、.pyo、.pyw、.pyd等等, 其中pyc和pyd为二进制文件, 且pyd格式是D语言(C/C++综合进化版本)生成的二进制文件, pyd是python的动态模组, 实质上也是DLL文件, 而pyc及pyo这两种格式是可以被反编译, 最后的pyw单纯只用来隐藏命令行的介面而已, 这边之所采用pyd的主要目的是为了保护程式码, 避免受到他人盗取采用, 下方将介绍如何将.py生成pdy文件, 这边采用的python版本为3.6.1

  1. 安装Cython
    输入指令: pip install cython
  2. 准备.py档案
    假设有一个test.py档要转成pyd文件, 其内容如下:
def hello():
    print("hello python world!")
  1. 新建setup.py档
    接着另建一份setup.py文件, 写法如下:
from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world',
    ext_modules = cythonize("test.py"),
)

假设有一个main资料夹里面含有许多.py档, 透过下方的方式可一次同时转多个档案, 写法如下:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world',
    ext_modules = cythonize(module_list="main/*.py", exclude='main/__ini__.py'),
)
  1. 生成pdy文件
    开启cmd指定到该目录, 输入指令
python setup.py build_ext --inplace

where

  • build_ext:build C/C++ extensions (compile/link to build directory),给python编译一个c、c++的拓展
  • --inplace:ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules,忽略build-lib,将编译后的扩展放到源目录中,与纯Python模块放在一起

将会生成如下几个档案, 可只保留.pyd文件档即可,

Python

  1. 可直接透过import方式来使用.pdy文件
    将上述的文件test.cp36-win_amd64.pyd先缩短名称为test.pyd, 无论是否要缩短名称都不影响结果, 写法如下:
import test

test.hello()

输出的结果为 hello python world!

6个月前 评论
Jason990420 (作者) 6个月前
曾牛逼 (楼主) 6个月前
曾牛逼 (楼主) 6个月前
Jason990420 (作者) 6个月前
讨论数量: 6
Jason990420

jennaweng0621.pixnet.net/blog/post...

将py文件档转成pyd文件档(DLL)

python程式目前可采用的副档名有.py、.pyc、.pyo、.pyw、.pyd等等, 其中pyc和pyd为二进制文件, 且pyd格式是D语言(C/C++综合进化版本)生成的二进制文件, pyd是python的动态模组, 实质上也是DLL文件, 而pyc及pyo这两种格式是可以被反编译, 最后的pyw单纯只用来隐藏命令行的介面而已, 这边之所采用pyd的主要目的是为了保护程式码, 避免受到他人盗取采用, 下方将介绍如何将.py生成pdy文件, 这边采用的python版本为3.6.1

  1. 安装Cython
    输入指令: pip install cython
  2. 准备.py档案
    假设有一个test.py档要转成pyd文件, 其内容如下:
def hello():
    print("hello python world!")
  1. 新建setup.py档
    接着另建一份setup.py文件, 写法如下:
from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world',
    ext_modules = cythonize("test.py"),
)

假设有一个main资料夹里面含有许多.py档, 透过下方的方式可一次同时转多个档案, 写法如下:

from distutils.core import setup
from Cython.Build import cythonize

setup(
    name = 'Hello world',
    ext_modules = cythonize(module_list="main/*.py", exclude='main/__ini__.py'),
)
  1. 生成pdy文件
    开启cmd指定到该目录, 输入指令
python setup.py build_ext --inplace

where

  • build_ext:build C/C++ extensions (compile/link to build directory),给python编译一个c、c++的拓展
  • --inplace:ignore build-lib and put compiled extensions into the source directory alongside your pure Python modules,忽略build-lib,将编译后的扩展放到源目录中,与纯Python模块放在一起

将会生成如下几个档案, 可只保留.pyd文件档即可,

Python

  1. 可直接透过import方式来使用.pdy文件
    将上述的文件test.cp36-win_amd64.pyd先缩短名称为test.pyd, 无论是否要缩短名称都不影响结果, 写法如下:
import test

test.hello()

输出的结果为 hello python world!

6个月前 评论
Jason990420 (作者) 6个月前
曾牛逼 (楼主) 6个月前
曾牛逼 (楼主) 6个月前
Jason990420 (作者) 6个月前

Cython或者Pybind之类的不都行么,另外dll和具体语言没啥关系,dll是Win上的动态链接的玩意,相当于linux下的.so文件,你拿rust golang弄不出dll文件了么。。。

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!