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. 数组(day07)

    数组名称不可以代表存储区 数组名称可以代表数组里第一个存储区的地址 可以对数组名称进行sizeof计算,结果是 数组里所有存储区的总大小 C99规范里可以使用变长数组 声明变长数组的时候可以用变量表示 ...

  2. (C/C++学习)1.C++中vector的使用

    说明:vector是C++中一个非常方便的容器类,它用于存放类型相同的元素,利用成员函数及相关函数可以方便的对元素进行增加或删除,排序或逆序等等,下面将对这些功能一一叙述. 一.vector的第一种用 ...

  3. 获取Class对象方式

    在java中,每个class都有一个相应的Class对象,当编写好一个类,编译完成后,在生成的.class文件中,就产生一个Class对象,用来表示这个类的类型信息.获得Class实例的三种方式: 1 ...

  4. Mysql查询缓存研究

    转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus). http://mp.weixin.qq.com/s?__biz=MzI ...

  5. 关于template 的23个问题

    发现新大陆.曾经慢慢才知道的东西.原来有个集中营: 看看updated, 处理方式是这么的好 35.1 " id="link-to-faq-35_1" style=&qu ...

  6. 准备开源用javascript写Tomcat下的WebApp的项目

    原创文章,转载请注明. 这个想法由来已久.用javascript编写Tomcat下的WebApp.现现在也有alpha版本号的实现. 这种话,前端程序猿就能够像用Node.js那样,用javascri ...

  7. KVO---视图间数据的传递:标签显示输入的内容【多个视图中】

    RootViewController.m #import "ModalViewController.h" @interface RootViewController () @end ...

  8. Thinking in Java:容器深入研究

    1.虚线框表示Abstract类,图中大量的类的名字都是以Abstract开头的,它们仅仅是部分实现了特定接口的工具,因此创建时能够选择从Abstract继承. Collections中的实用方法:挑 ...

  9. wpf Command canExecute 更新

    可以调用以下语句通知 CommandManager.InvalidateRequerySuggested();

  10. servlet 处理过程

    刚才花了一个小时找 servlet 的一个错误.终于找出来了,也大概明确 tomcat server对请求的处理顺序.以下做简单总结: 浏览器发送请求,传给 tomcat 在此请求地址指向的文件中定义 ...