电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

Python .py生成.pyd文件并打包.exe 的注意事項說明

瀏覽:23日期:2022-06-26 14:03:09

最近用python寫了一個小程序,想發(fā)布出去讓人試用又不想暴露源碼,搜索了一下發(fā)現(xiàn)將py文件編譯成pyd文件就能達到目的。

轉(zhuǎn)換過程很簡單,但是在調(diào)用pyd文件并且打包為單個exe文件的時候遇到一個坑,搞了一天才解決,在這里分享一下。

首先安裝cython庫

個人比較喜歡用清華的鏡像庫,速度快。

pip install Cyphton -i https://pypi.tuna.tsinghua.edu.cn/simple然后創(chuàng)建一個setup.py文件

寫入以下內(nèi)容:

from distutils.core import setupfrom Cython.Build import cythonizesetup(ext_modules=cythonize('BetaV14.py'))BetaV14.py就是要轉(zhuǎn)換為pyd文件的代碼文件

命令行輸入:

python setup.py build_ext --inplace

會在.py文件目錄下生成一個BetaV14.cp37-win_amd64.pyd文件,文件名中“.cp37-win_amd64”這一段可以刪除,不刪除也可以正常調(diào)用;但原文件名字段不能改變。

接下來需要打包發(fā)布為.exe文件

我用的是pyinstaller,還是用清華鏡像庫安裝。

pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

根據(jù)一些教程,有的說在命令行直接輸入:

pyinstaller -F BetaV14.py

就能直接引用pyd文件打包發(fā)布exe文件,但是在我這里出現(xiàn)文件缺失的錯誤:

ValueError: Module file F:python項目1BetaV14.py is missing

繼續(xù)查找問題,發(fā)現(xiàn)需要用一個入口程序來導入pyd文件,于是創(chuàng)建一個main.py文件,import剛才生成的模塊,pyd文件默認優(yōu)先級高于py文件,可以在后面解包exe文件來驗證。

import BetaV14if __name__ == ’__main__’: BetaV14()

這里需要注意的是程序的__main__入口只能有一個,如果源py文件中有定義main入口,需要注釋掉并調(diào)整代碼縮進,否則通過main.py調(diào)用pyd文件遇到if name == ‘main’:之后的代碼都不會運行。

接著命令行輸入:

pyinstaller -F main.py

打包成.exe文件,在dist目錄下發(fā)現(xiàn)main.exe文件大小只有5M,之前采用py文件打包的程序有接近50M,運行之后閃退。這個問題想了半天才想出來,可能是引用了大量的第三方庫沒有打包進去,于是將源py文件頭部import部分全部復制到main.py文件頭部。

import win32guiimport win32apiimport win32conimport time import randomimport datetimeimport os,sysimport configparserimport numpy as npfrom PIL import Imagefrom scipy.signal import convolve2dimport http.clientimport subprocessimport BetaV14if __name__ == ’__main__’: BetaV14()

再次用命令pyinstaller -F main.py打包,得到正常大小的.exe文件,點擊能正常運行。

接下來我們用pyinstxtractor.py(不清楚該腳本是否涉及著作權(quán),請自行搜索)解包exe文件驗證一下,命令行輸入:

python pyinstxtractor.py main.exe

會得到一個main.exe_extracted文件夾,在文件夾下發(fā)現(xiàn)文件BetaV14.pyd,說明通過引用pyd文件打包成功。

Python .py生成.pyd文件并打包.exe 的注意事項說明

在此作為一個初學者記錄一下自己遇到的坑,讓大佬們見笑了。

補充:python打包編譯成pyd或者_python之setup.py的那些事

Python .py生成.pyd文件并打包.exe 的注意事項說明

今天偶然對setup.py產(chǎn)生了興趣,以前只知道可以用它來安裝包,例如

python setup.py build ->python setup.py install.當然前提你下載的這個源碼包是壓縮的,之前對這個理解并不深,今天偶然看見pip install -e . 的用法,然后串起來想了一下。

我的目錄結(jié)構(gòu)如上,首先我創(chuàng)建了一個setuptutorial的directory,然后我在下面創(chuàng)建了greet_pkg的python package,并且在setuptutorial下面創(chuàng)建了setup.py如下

from setuptools import setup, find_packages setup( name=’greet’, version=’1.0.0’, packages=find_packages(include=[’greet_pkg’, ’greet_pkg.*’]), url=’’, license=’uestc’, author=’jack’, author_email=’2444093230@qq.com’, description=’test package’, py_modules=[’greet2’], install_requires=[’pyjokes’])

greet2.py如下

def greet2(name): print( ’hello’,name,’this is greet2’ )

在greet_pkg下面下了一個greet.py如下

import pyjokesdef greet(name): print(’hello!’, name, f’im telling you a joke {pyjokes.get_joke()}’)整體目錄結(jié)構(gòu)和setup.py就如上所示

接下來好戲開場了,如果我要在任意其他文件里面使用到我定義的greet()方法,以前的做法是按照import規(guī)則在其他文件里面導入,當然如果寫的不規(guī)范,及其的容易出問題,這里我提供另外一個思路,在setuptutorial下面使用pip install -e . 命令,將setup.py里面包含的package和py_module安裝到Libary root下,當然他的實際的location不是在Libary root下,這個你可以在pip install -e . 之后使用pip show greet 查看他的信息.

到這里就完了嗎?

當然沒有,這個就是之前的python setup.py build 的作用,我這里猜測大概率是把tar.gz包轉(zhuǎn)化成我上述的目錄結(jié)構(gòu)一樣的directory。

而python setup.py install 的作用就類似于pip install ’-e’ . 。而且python setup.py install 之后的greet包是真的存在于sitepackages里面的。

setup.py除了上述安裝包的作用,還可以是他的逆過程如 python setup.py sdist 成greet.tar.gz,這樣就有上述的裝包的過程先build再install。

還可以使用setup.py將py文件轉(zhuǎn)化為pyd,也可以說將pyx文件轉(zhuǎn)化為pyd,

from setuptools import setup# from distutils.core import setupfrom Cython.Build import cythonize # setup(# name=’hello’,# ext_modules=cythonize([’sayhi.py’])# )

然后運行python setup.py build_ext --inplace就可以了!

pyd文件可以很好的隱蔽py文件里面的實現(xiàn),和linux下的so文件類似。

有類似py->pyd功能的有easycython模塊,可以直接pip安裝。

有人可能會說pyc也看不見源碼嗎?

但是他可以被反編譯23333

至于如何將py編譯成pyc或pyo

可以使用py_compile或者compileall,不了解的可以自行搜索一下,都有很多的例子,還有針對pyc的反編譯庫,都可以搜到,至此setup.py我所了解的功能都談完了,里面還有很多參數(shù)可以靈活配置,實現(xiàn)更加炫酷的效果可以查看這個鏈接setup.py

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 扫地车厂家-山西洗地机-太原电动扫地车「大同朔州吕梁晋中忻州长治晋城洗地机」山西锦力环保科技有限公司 | 净水器代理,净水器招商,净水器加盟-FineSky德国法兹全屋净水 | 根系分析仪,大米外观品质检测仪,考种仪,藻类鉴定计数仪,叶面积仪,菌落计数仪,抑菌圈测量仪,抗生素效价测定仪,植物表型仪,冠层分析仪-杭州万深检测仪器网 | 汕头市盛大文化传播有限公司,www.11400.cc | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 氧化锆纤维_1800度高温退火炉_1800度高温烧结炉-南京理工宇龙新材料股份有限公司 | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 常州减速机_减速机厂家_常州市减速机厂有限公司| 冷水机-冰水机-冷冻机-冷风机-本森智能装备(深圳)有限公司 | 手术室净化厂家-成都做医院净化工程的公司-四川华锐-15年特殊科室建设经验 | 四川成人高考_四川成考报名网 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 早报网| 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 复合土工膜厂家|hdpe防渗土工膜|复合防渗土工布|玻璃纤维|双向塑料土工格栅-安徽路建新材料有限公司 | 智能案卷柜_卷宗柜_钥匙柜_文件流转柜_装备柜_浙江福源智能科技有限公司 | 家乐事净水器官网-净水器厂家「官方」 | 特材真空腔体_哈氏合金/镍基合金/纯镍腔体-无锡国德机械制造有限公司 | 碳刷_刷握_集电环_恒压簧_电刷厂家-上海丹臻机电科技有限公司 | RS系列电阻器,RK_RJ启动调整电阻器,RQ_RZ电阻器-上海永上电器有限公司 | 广州活动策划公司-15+年专业大型公关活动策划执行管理经验-睿阳广告 | 济南侦探调查-济南调查取证-山东私家侦探-山东白豹调查咨询公司 密集架|电动密集架|移动密集架|黑龙江档案密集架-大量现货厂家销售 | 空调风机,低噪声离心式通风机,不锈钢防爆风机,前倾皮带传动风机,后倾空调风机-山东捷风风机有限公司 | 高压分散机(高压细胞破碎仪)百科-北京天恩瀚拓 | 碳化硅,氮化硅,冰晶石,绢云母,氟化铝,白刚玉,棕刚玉,石墨,铝粉,铁粉,金属硅粉,金属铝粉,氧化铝粉,硅微粉,蓝晶石,红柱石,莫来石,粉煤灰,三聚磷酸钠,六偏磷酸钠,硫酸镁-皓泉新材料 | 衢州装饰公司|装潢公司|办公楼装修|排屋装修|别墅装修-衢州佳盛装饰 | 注浆压力变送器-高温熔体传感器-矿用压力传感器|ZHYQ朝辉 | 贵州自考_贵州自学考试网 | 西安耀程造价培训机构_工程预算实训_广联达实作实操培训 | 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 塑胶跑道_学校塑胶跑道_塑胶球场_运动场材料厂家_中国塑胶跑道十大生产厂家_混合型塑胶跑道_透气型塑胶跑道-广东绿晨体育设施有限公司 | 杭州|上海贴标机-百科 | 新疆十佳旅行社_新疆旅游报价_新疆自驾跟团游-新疆中西部国际旅行社 | 圆形振动筛_圆筛_旋振筛_三次元振动筛-河南新乡德诚生产厂家 | sus630/303cu不锈钢棒,440C/430F/17-4ph不锈钢研磨棒-江苏德镍金属科技有限公司 | 中医治疗皮肤病_潍坊银康医院「山东」重症皮肤病救治平台 | 不锈钢钢格栅板_热浸锌钢格板_镀锌钢格栅板_钢格栅盖板-格美瑞 | 安徽净化板_合肥岩棉板厂家_玻镁板厂家_安徽科艺美洁净科技有限公司 | 电池挤压试验机-自行车喷淋-车辆碾压试验装置-深圳德迈盛测控设备有限公司 | 耐热钢-耐磨钢-山东聚金合金钢铸造有限公司 |