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. 记一次惊心的网站 TCP 队列问题排查经历

    https://blog.csdn.net/chenlycly/article/details/80868990 http://www.mytju.com/classcode/news_readnew ...

  2. Linux—Ubuntu14.0.5 修改gitlab管理员的密码

    1. 在root用户下,执行 gitlab-rails console production #进入gitlba控制台 2.获得用户数据,修改用户密码 [root@svr34 bin]# gitlab ...

  3. windows系统通过命令行查看配件的详细信息

    今天我在工作中遇到这样一个问题:客户服务器用的是win 2012系统,不打开机箱,不借助其他类似于鲁大师软件的情况下查看内存条的详细信息 刚开始的时候我通过systeminfo命令,只能查出来总的内存 ...

  4. 第一次训练 密码:acmore

    #include <cstdio> #include <cstring> #define M 100010 #define INF 0x7FFFFFFF #define Min ...

  5. 百度之星2014复赛 - 1002 - The Query on the Tree

    先上题目: The Query on the Tree Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (J ...

  6. swift 笔记 (十四) —— 构造过程

    构造过程 为了生成类.结构体.枚举等的实例,而做的准备过程,叫做构造过程. 为了这个过程,我们一般会定义一个方法来完毕,这种方法叫做构造器.当然它的逆过程,叫做析构器,用于在实例被释放前做一些清理工作 ...

  7. Fitnesse安装

    Fitnesse安装比较简单 1.确保机器上已经安装了java环境

  8. oc16--set,get

    // // Kline.h // day13 #import <Foundation/Foundation.h> @interface Kline : NSObject { int _ma ...

  9. 转四种常见的post请求

    HTTP/1.1 协议规定的 HTTP 请求方法有 OPTIONS.GET.HEAD.POST.PUT.DELETE.TRACE.CONNECT 这几种.其中 POST 一般用来向服务端提交数据,本文 ...

  10. C++ 共用体 枚举类型 所有

    一.共用体类型 1.共用体的概念. 有时候需要将几种不同类型的变量存放到同一段内存单元中.例如有三个变量,他们的字节数不同,但是都从同一个地址开始存放.也就是用了覆盖技术,几个变量互相覆盖.这种使几个 ...