Recipes是从一本书上看来的,即有诀窍又有食谱的意思。这里想记一些工作中遇到的问题和解决方法,说决窍有点过了,说食谱照单做又不足,所以Recipe这个词两个意思都有混合起来正合适。

1、Windows上的PyInstaller,在bootloader开始运行时会调用SetDllDirectory() Win32 API来限定Dll的搜索目录。如果你打包程序里面会调用或依赖外部DLL这将报WinError 126错误,所以需要在bootloader运行之后、你的外部DLL加载之前取消这个限制。至于如何取消请参考MSDN,bootloader对SetDllDirectory()的调用请参考PyInstaller bootloader代码。

2、已有Python实现库,如何做成万金油C接口、放在DLL里面给其它语言调用?有一种对自己看起来颇折腾实则省缺了重复实现、用户又感觉不到的办法:把你自己的Python库和绿色版的Python解释器当作DLL资源嵌进去。在DLL_PROCESS_ATTACH时释放解释器和自己的库到临时目录,DLL_PROCESS_DETACH时清理,在接品实现中用Python C API调自己的库。其实这个想法来源于PyInstaller,是模仿了它的做法。具体实作:可以用7Zip把自己的库和Python解释器各打一个自解压包,这样解压的工作轻松一些;如果自己的库用Cython编译成.pyd了要想在退出时干净地清理那就麻烦些:Python解释器运行期间会一直持有这个.pyd的句柄,即使你调FreeLibrary()也不行——解决办法:Hook ExitProcess()。

3、绿化Python有个好处:定制性好,在别的电脑上跑时不用担心人家没装Python或者装了有版本冲突。但也有个麻烦的地方:Python.exe的绝对路径被写到了pip.exe里面,but why? 解决办法可参考这里:Create a portable Python with Pip on Windows。不过即使这样做了也还不够彻底,还有其它工作要做。计划有空看看WinPython是怎么做的。

4、写新代码时要思路清晰了再动手,写完之后对着代码在脑子里演练验证一下思路,没疑问了清晰了再运行测试,可减少不少代码调试的时间。

Programming Recipes的更多相关文章

  1. <转载>国外程序员推荐的免费编程书籍资源

    一.George Stocker 提供了一大串,分类如下: How to Design Programs: An Introduction to Computing and Programming 2 ...

  2. OpenGL book list

      From: https://www.codeproject.com/Articles/771225/Learning-Modern-OpenGL   A little guide about mo ...

  3. 5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics

    5 Techniques To Understand Machine Learning Algorithms Without the Background in Mathematics Where d ...

  4. 机器学习的5种“兵法"

    大数据文摘作品,欢迎个人转发朋友圈,自媒体.媒体.机构转载务必申请授权,后台留言“机构名称+转载”,申请过授权的不必再次申请,只要按约定转载即可. 作者:Jason Brownlee 译者:Clair ...

  5. Github上的1000多本免费电子书重磅来袭!

    Github上的1000多本免费电子书重磅来袭!   以前 StackOverFlow 也给出了一个免费电子书列表,现在在Github上可以看到时刻保持更新的列表了. 瞥一眼下面的书籍分类目录,你就能 ...

  6. Github 的一个免费编程书籍列表

    Index Ada Agda Alef Android APL Arduino ASP.NET MVC Assembly Language Non-X86 AutoHotkey Autotools A ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (15) -----第三章 查询之与列表值比较和过滤关联实体

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-8与列表值比较 问题 你想查询一个实体,条件是给定的列表中包含指定属性的值. 解 ...

  8. Programming Entity Framework 翻译

    刚开始接触.net,c#语法应该说还没掌握好.学习实践的旅程就从linq和EF开始吧.感觉相比之前的开发方式,linq和EF方便好多. linq入门用了好久,因为c#不行,补习了2.0的泛型,3.0和 ...

  9. iOS Programming Recipe 6: Creating a custom UIView using a Nib

    iOS Programming Recipe 6: Creating a custom UIView using a Nib JANUARY 7, 2013 BY MIKETT 12 COMMENTS ...

随机推荐

  1. 原生js封装ajax,深入理解$.ajax()

    直接上代码 //封装的ajax函数 // 传一个对象,所有要用的参数都在对象中 因为不写对象 实参列表个数太多,所以像jq一样,调用ajax也是把对象当实际参数传进去 // type 请求方式 默认g ...

  2. 爬虫写法进阶:普通函数--->函数类--->Scrapy框架

    本文转载自以下网站: 从 Class 类到 Scrapy https://www.makcyun.top/web_scraping_withpython12.html 普通函数爬虫: https:// ...

  3. python中字节与字符串的转换

    #bytes object    byte = b"byte example"     # str object    str = "str example" ...

  4. 【2】Django安装

    **万物负阴而抱阳,冲气以为和 ** ——老子<道德经> 我们静下心态,开始我们的Django之旅 本节内容 Django的安装 安装结果验证 了解官方文档 1. 安装Django 我们强 ...

  5. ecshop 后台增加栏目

    ① 后台左侧导航添加菜单 Ecshop后台增加一个左侧列表菜单需要修改三个文件/admin/includes/inc_menu.php /admin/includes/inc_priv.php /la ...

  6. OpenCV实现USM锐化与测试

    OpenCV实现USM锐化 [转]http://www.programdevelop.com/4964391/ USM (Unsharp masking) is a common operation ...

  7. lunix下的redis数据库操作——set集合

    创建:(集合的特点是:有序,无重复) sadd set 1 2 3 4 5 6 查看: smembers set 删除元素: srem set 3 # 还剩 1 2 4 5 6 移动: sadd se ...

  8. 【习题 4-5 Uva1590】 IP Networks

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 假设从第i位开始有不一样的. 那么就把i+1..32位全都置0. 掩码的话类似.前i为全为1,后面32-i位全0. 尽量让后面的连续 ...

  9. 【例题4-6 uva12412】A Typical Homework (a.k.a Shi Xiong Bang Bang Mang)

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 训练编程的题. 原题中没有除0的数据,所以别担心你的代码是因为除0错了. 多半跟我一样. 也是因为没有+eps 就是比如你要算tot ...

  10. 服务器session,Tomcat有自己的session维护机制,apache有自己的session维护机制

    1.SESSION一般不是你说的这种工作方式,你打开一个浏览器,再打开一个,请求同一个网址,然后其中一个登陆,另外一个绝对不会也登陆.SESSION和浏览器本身这个程序就是挂钩的,一般不通过IP和端口 ...