有没有大佬知道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!

1年前 评论
Jason990420 (作者) 1年前
曾牛逼 (楼主) 1年前
曾牛逼 (楼主) 1年前
Jason990420 (作者) 1年前
讨论数量: 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!

1年前 评论
Jason990420 (作者) 1年前
曾牛逼 (楼主) 1年前
曾牛逼 (楼主) 1年前
Jason990420 (作者) 1年前

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

1年前 评论