精华内容
下载资源
问答
  • Python加密如何封装Python代码,让别人方便调用,同时又能起到加密的作用,本文介绍如何封装成so文件和dll文件以及调用方式首先需要配置环境 安装Cython gccLinux下的.so文件创建要封装的文件mytest.pyimport ...

    Python加密

    如何封装Python代码,让别人方便调用,同时又能起到加密的作用,本文介绍如何封装成so文件和dll文件以及调用方式

    首先需要配置环境 安装Cython gcc

    Linux下的.so文件

    创建要封装的文件mytest.py

    import datetime

    class DataCenter():

    def gettime(self):

    print(datetime.datetime.now())

    def write_data(self):

    print("hello XiaoBei!")

    创建调用文件 so_test.py

    from mytest import DataCenter

    data = DataCenter()

    data.gettime()

    data.write_data()

    运行so_test.py,证明程序正常

    1783585-20200319131130937-259392828.png

    创建打包文件 setup.py

    from distutils.core import setup

    from Cython.Build import cythonize

    #[]内是要打包的文件名,也可多个文件

    setup(ext_modules = cythonize(["mytest.py"]))

    执行python3 setup.py build_ext

    1783585-20200319131651872-252636946.png

    在当前目录下生成build文件夹和mytest.c文件,.so文件就在build文件夹内

    将so_test.py文件放到so目录下,运行,即可得到结果

    1783585-20200319131908238-1408138051.png

    Windows下将Python封装成pyd文件

    pyd就是dll

    mytest.py 和dll_test.py和上面一样

    创建setupDll.py

    # !/usr/bin/env python

    # -*- coding: utf-8 -*-

    from distutils.core import setup

    from Cython.Build import cythonize

    from distutils.extension import Extension

    def main():

    # 这里为文件名 可以增加多个Extension(' ', [' '])

    extensions = [Extension('mytest', ['mytest.py'])]

    setup(ext_modules=cythonize(extensions))

    if __name__ == '__main__':

    main()

    在pycharm的terminal下输入Python setupDll build_ext,得到pyd文件

    1783585-20200319133609974-1218925353.png

    在build文件夹下得到.pyd文件调用方式不变

    # !/usr/bin/env python

    # -*- coding: utf-8 -*-

    #如果不想改变pyd路径,则需要在dll_test.py中加入:

    import sys

    sys.path.append('./build/lib.win-amd64-3.7/')

    from mytest import DataCenter

    def main():

    data = DataCenter()

    data.gettime()

    data.write_data()

    if __name__ == '__main__':

    main()

    运行得到结果

    1783585-20200319134113567-1451018242.png

    展开全文
  • 教你如何Python程序打包成DLL Python数据类型和C数据类型似乎有一个\u201C一一对应\u201D关系,此外,因为Python(准确地说,CPython)本身是由C语言实现,因此,Python数据类型之间的函数操作必须有一个相应的与C语言的...

    教你如何Python程序打包成DLL Python数据类型和C数据类型似乎有一个\u201C一一对应\u201D关系,此外,因为Python(准确地说,CPython)本身是由C语言实现,因此,Python数据类型之间的函数操作必须有一个相应的与C语言的关系。有可能\u201C自动\u201D做置换和Python代码可以直接打开C代码?答案是肯定的,这是Cython解决的主要问题。本教程将介绍如何Python代码打包成一个DLL的C \/ c++程序调用与Cython窗口。编译环境Visual Studio JetBrains PyCharm安装Python 3或Python 2 Cython Cython是Python的语言,结合语法和c可以简单地认为是Python添加静态类型。

    您需要使用easy_install安装Cython, easy_install已经伴随着Python和上面。完成在Visual Studio的命令提示符(请注意,如果您使用32位或64位Visual Studio命令提示符Python版本,您可能需要使用管理员权限运行):使用easy_install - u cython cython PyCharm编译一个新项目,然后创建一个新的py文件:great_,文件中输入以下内容:def str_add (str1 str2):返回int (str1) + int (str2)这是一个简单的函数,该函数将一个字符串转换为int。为了让这个函数被编译Cython,您需要创建一个新文件,并添加以下内容:cdef公共int str_add (const char * str1, const char * str2):返回int (str1) + int (str2) cdef和公众等都是Cython关键词,这些关键词可以帮助函数被称为外部。

    CythonCython支持Python的动态类型的特性。如果你使用VS后续步骤的命令行编译,您还可以生成dll。但是,我不知道为什么我不能提取DLL中的函数地址在实验。返回值使用Cython的静态类型关键字指定数据类型。在得到. c和. h文件后,我们需要创建一个VS DLL项目。打开VS软件和win32项目,创建一个新的应用程序类型的DLL,附加选项是一个空项目。刚才. c和. h文件复制到项目文件夹的代码存储和将它们添加到项目中。添加一个空的一个项目,并添加以下代码:# include \看到生成的PyInit_run();断裂;案例DLL_PROCESS_DETACH: Py_Finalize();

    }返回TRUE;}右键单击项目,属性,并输入vc++目录选项卡页面。添加Python包括路径包括路径,如\u201CC: \\ ProgramFiles \\ Python36 \\包括\u201C。添加Python库目录中的lib,比如\u201CC: \\ Program Files \\ Python36 \\填词\u201D。注意,编译的版本选择释放,x64平台或x32平台根据Python版本选择。编译后,你可以得到dll文件。的动态调用DLL创建另一个项目来测试新生成的DLL。打开和创建一个新的Win32控制台应用程序,并添加以下代码:# include \实例句柄hDLL = LoadLibrary (_T (\}}系统(\u201C暂停\u201D),返回0;

    补充后通过Cython . h和c文件,您可以编译通过的cl命令和命令提示符。这种方法支持Python的动态数据类型,你需要注意到x86 \/ x64平台编译时选择和管理员权限。但DLL成功编译之后我就不能被称为正确,具体原因尚不清楚。编译Linux下会更方便,因为Linux本身支持Python和C \/ c++编译器,因此,环境配置将变得更加容易。参考

    展开全文
  • 原文地址http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer# This is the distutils script for creating a Python-based com dll # server using ctypes....# After you run this (from this directory) ...

    原文地址http://www.py2exe.org/index.cgi/Py2exeAndCtypesComDllServer# This is the distutils script for creating a Python-based com dll

    # server using ctypes.com. This script should be run like this:

    #

    # % python setup.py py2exe

    #

    # After you run this (from this directory) you will find two directories here:

    # "build" and "dist". The .dll file in dist is what you are looking for.

    ##############################################################################

    from distutils.core import setup

    import py2exe

    import sys

    class Target:

    def __init__(self, **kw):

    self.__dict__.update(kw)

    # for the version info resources (Properties -- Version)

    self.version = "0.0.1"

    self.company_name = "my company"

    self.copyright = "© 2006, my company"

    self.name = "my com server name"

    my_com_server_target = Target(

    description = "my com server",

    # use module name for ctypes.com dll server

    modules = ["dir.my_com_server"],

    # the following line embeds the typelib within the dll

    other_resources = [("TYPELIB", 1, open(r"dir\my_com_server.tlb", "rb").read())],

    # we only want the inproc (dll) server

    create_exe = False

    )

    setup(

    name="my_com_server",

    # the following two parameters embed support files within dll file

    options={"py2exe": {"bundle_files": 1, }},

    zipfile=None,

    version="0.0.1",

    description="my com server",

    # author, maintainer, contact go here:

    author="First Last",

    author_email="some_name@some_company.com",

    packages=["dir"],

    ctypes_com_server=[my_com_server_target]

    )

    展开全文
  • 如今,随着深度学习的发展,python已经成为了深度学习研究中第一语言。绝大部分的深度学习工具包都有python...把python语言写的算法编译动态库,能够提供给其他语言调用,这能够在很大程度上提高算法的开发效率...

    如今,随着深度学习的发展,python已经成为了深度学习研究中第一语言。绝大部分的深度学习工具包都有python的版本,很多重要算法都有python版本的实现。为了将这些算法应用到具体工程中,这些工具包也提供了不同类型的接口。

    动态链接库(.dll,.so)是系统开发中一种非常重要的跨语言协作方式。把python语言写成的算法编译成动态库,能够提供给其他语言调用,这能够在很大程度上提高算法的开发效率。

    但是,虽然python可以调用其他语言生成的动态库,python作为一种脚本语言,本身是不能直接编译生成动态库的。为了生成动态库,我们借助cython,将python脚本变成c语言文件。具体过程,我们通过一个简单的例子来解释。

    def str_add(str1,str2):

    return int(str1) + int(str2)

    这个代码,将两个数字组成的字符串转化成数字,并求和。我们把这个代码保存成run.py备用。根据cython的语法,我们给出cython版本的函数:

    cdef public str_add(str1,str2):

    return int(str1) + int(str2)

    和前面python版本的相比,cdef替换了def,并加了public关键字,表示这个函数要导出。将这个代码保存成pyx文件,比如run.pyx。

    接下来,我们执行如下命令,把这个代码变成c语言版本:

    cython run.pyx

    这时,目录下面生出来run.h和run.c两个文件。这个两个文件通过调用python的C-API实现了run.py代码的功能。

    接下来,我们编写动态库的主文件dllmain.c:

    #include

    #include

    #include "run.h"

    extern __declspec(dllexport) int __stdcall _str_add(const char * a, const char * b) {

    return PyLong_AsLong(str_add(PyUnicode_FromString(a),PyUnicode_FromString(b)));

    }

    BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpReserved) {

    switch( fdwReason ) {

    case DLL_PROCESS_ATTACH:

    Py_Initialize();

    PyInit_run(); #dll初始化的时候调用,这是python3的写法,python2改成,initrun()。参见生成的run.h

    break;

    case DLL_PROCESS_DETACH:

    Py_Finalize();

    break;

    }

    return TRUE;

    }

    该文件定义了导出函数_str_add。在python中,所有数据都以pyobject进行存储。这个函数通过PyUnicode_FromString,将两个字符串变成python对象类型,并调用run.h里面的函数str_add求和,并把结果通过PyLong_AsLong函数从python对象,变成整形数字。

    我们可以通过如下命令,将这个代码编译生成dll:

    cl /LD dllmain.c run.c -IC:\python36\include C:\python36\libs\python36.lib

    这里python的路径,根据不同电脑python的安装位置,做相应调整。

    生成的dll,我们写个简单调用,测试一下:

    #include "stdio.h"

    #include "stdlib.h"

    extern __declspec(dllexport) int __stdcall _str_add(const char * a, const char * b);

    #pragma comment(lib,"dllmain.lib")

    int main()

    {

    printf("%d \n", _str_add("123","456"));

    return 0;

    }

    输出结果: 579,正好等于123+456。

    通过以上步骤,我们已经能够把python代码实现的功能,封装成动态库。然而,这个动态库无法在没有安装python的机器上面运行。事实上,python代码,通常需要很多依赖包才能运行。而且,每段代码需要的依赖包是不一样的。为了查找这些包,我们采用另外一个工具pyinstaller。具体步骤简介如下:

    virtualenv envpack # 创建新的环境,python包依赖比较复杂,创建新环境可以减少最终引入的包

    cd envpack # 进入目录

    #复制run.py到这个目录,run.py运行需要的包,和最终dll需要的包是一样的

    Scripts\activate # 激活并切换到virtualenv环境

    pip install pyinstaller # 安装打包工具pyinstaller

    pip install numpy # 安装numpy等脚本需要的库,查看你的import

    pyinstaller run.py # 打包命令

    Scripts\deactivate # 打包成功后,使用命令取消激活环境

    需要打包的文件在envpack\dist, 包括很多.dll和.pyd文件,把这些文件和dll一起发布即可。

    总结

    到此这篇关于使用python创建生成动态链接库dll的方法的文章就介绍到这了,更多相关python动态链接库dll内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

    本文标题: 使用python创建生成动态链接库dll的方法

    本文地址: http://www.cppcns.com/jiaoben/python/312795.html

    展开全文
  • 用Boost.Python将C++代码封装Python模块一. 基础篇借助Boost.Python库可以将C/C++代码方便、快捷地移植到python模块当中,实现对python模块的扩充。首先,将C++下的代码编译为动态库,并将生成的动态库命名为封装...
  • pycharm写Python是怎么查看导入模块的代码按住Ctrl键,左键点击模块名我有python的一个源代码及经打包过的一个安装程序,能对安装好的程序窗口内容做修改么?glade文件的话如果你没有修改控件的名称应该是没有问题的...
  • 使用python 检索PE文件(dLl,exe...如何用python读取dll文件属性的Copyright,Versionapi getfileversioninfo能调用出来,麻烦写成dll自己调. import win32api def getFileVersion(file_name): info = win32api.Get...
  • 本篇文章小编给大家分享一下使用python创建生成动态链接库dll方法,代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。如今,随着深度学习的发展,python已经成为了深度...
  • python封装成exe

    万次阅读 多人点赞 2018-10-17 14:45:15
    最近写了一个小小的程序,需要进行封装exe,为了简单,就直接用了pyinstaller这个模块,对于python3.6版本的童鞋来说,简直方便的不要。下面就给大家介绍一下如何用pyinstaller去封装程序为exe程序。 首先,需要安装...
  • 操作系统:Windows 10 IDE:Visual Studio 2017(community) SDK语言:C++ 应用程序语言:Python 相机类型:深度相机 一.应用背景 ...三.C++封装成dll 四.Python调用dll 五.其他问题 ...
  • Python的包装&我们许多人的部署仍然是一个痛点.没有一个银弹.这里有几种方法:OpenCV构建方法OpenCV generates these wrapper functions automatically from the C++headers using some Python scripts which are ...
  • https://blog.csdn.net/qq_32113189/article/details/83109566最近写了一个小小的程序,需要进行封装exe,为了简单,就直接用了pyinstaller这个模块,对于python3.6版本的童鞋来说,简直方便的不要。下面就给大家...
  • 展开全部可以的,只要把python模块转换2113dll模块,利用5261Python自带的ctypes模块加载调用就行。4102ctypes 是Python的外部函数库。它提供了与1653 C语言兼容的数据类型,并允许调用 DLL 或共享库中的函数。可...
  • 最近写了一个小小的程序,需要进行封装exe,为了简单,就直接用了pyinstaller这个模块,对于python3.x(我用的是3.7版本)版本的童鞋来说,简直方便的不要。下面就给大家介绍一下如何用pyinstaller去封装程序为exe程序...
  • python怎么把自己编写的类 封装成dll或com组件,让其他语言调用啊? 最好有个实例 跪谢!!!
  • py文件打包exe文件的方式一共有三种:py2exe、PyInstaller和cx_Freeze本文分四个步骤来详讲如何用PyInstaller将py文件打包exe文件1.... PyInstaller简介1.python相关文件介绍python作为一门解释型脚...
  • 今天小编就为大家分享一篇Python封装成可带参数的EXE安装包实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧 最近有一个小项目,有如下的需求: 将某几个源码文件夹进行打包,文件夹内有py...
  • 我是一个学c++的学生, 写了个dllpython调用,报错win[1114] (dll的名字是Project3.dll) class.h ``` #ifndef __CLASS_H__ #define __CLASS_H__ class a { public: int fac(int z); void setx(int...
  • 将某几个源码文件夹进行打包,文件夹内有py文件、dll文件、exe文件等各种文件类型 打包生成的安装包,在进行安装的时候,应该能够带有参数,对配置文件进行修改配置 安装过程中,可以配置系统环境变量 能够检测环境...
  • 当出现封装后的动态库DLL出现有的电脑可以用,有的不行时,下面为解决办法 https://blog.csdn.net/nullccc/article/details/81015012
  • RouterScan-Python封装 B. 在老师的指导下验证了ScanRouter的参数应该是结构体的指针,而不是句柄; 那么封装可以通过构造一个相同的结构体传入来完成,但是原程序得到结果的方法为Print_GUI,即直接通过句柄...
  • 使用的是py2exe库一:下载地址http://sourceforge.net/projects/py2exe/files/py2exe/安装方法很简单,它会自动搜索python的安装路径,一切都直接下一步即可。二:首先需要写一个脚本,名字为setup.py内容如下from ...
  • py2exe其实就是一款可以将将python2.7编写的脚本轻松打包exe格式的小工具。软件安装使用都很简单,小编也会提供简单的教程,需要的朋友下载试试吧!py2exe怎么用默认情况下,py2exe在目录dist下创建以下这些必须的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,432
精华内容 3,372
关键字:

python封装成dll

python 订阅