如何把python最小化安装在客户机上面

因为想尝试在我们的桌面软件中加入python支持,所以想简化python的库,到时候直接放到客户机上面,并且放到我们的目录下,尽量免去不必要的东西,也不要影响机子,不过当写好的程序放到测试机子上后,老是说找不到no module named site,后来看下了代码,发现是找不到site这个库,这个库也是python初始化的时候需要用到的库,解决方法:

1.尝试把我电脑上的python里面的Lib放到客户机上程序的目录,建立一个python27/lib/,结果还是失败

2.lib下的东西放到跟exe同一个目录,可以,但是还是谁显示import pbk_resource错误,但已经可以运行python的解释器了,不过因为跟exe在同一个目录太杂,所以放弃这种方法

 

 

 

后来看了Py_Initialize的代码,发现在没有设置PYTHONHOME的时候,python是这样查找lib:

如下代码

 

 if (pythonhome == NULL || *pythonhome == '\0') {
        if (search_for_prefix(argv0_path, LANDMARK))
            pythonhome = prefix;
        else
            pythonhome = NULL;
    }
    else
        strncpy(prefix, pythonhome, MAXPATHLEN);

 

1.这个是当pythonhomeNULL的时候,python的初始化函数会调用search_for_prefix来设置默认的home

 

复制代码
static int

search_for_prefix(char *argv0_path, char *landmark)
{
    /* Search from argv0_path, until landmark is found */
    strcpy(prefix, argv0_path);
    do {
        if (gotlandmark(lan dmark))
            return 1;
        reduce(prefix);
    } while (prefix[0]);

    return 0;
}
复制代码

 

2.landmark是一个字符串,里面是lib/os.pygotlandmark主要是测试下当年目录下的是否有lib/os.py

 

复制代码
/* gotlandmark only called by search_for_prefix, which ensures

   'prefix' is null terminated in bounds.  join() ensures

   'landmark' can not overflow prefix if too long.

*/

static int
gotlandmark(char *landmark)
{
    int ok;

    Py_ssize_t n;

    n = strlen(prefix);
    join(prefix, landmark);
    ok = ismodule(prefix);
    prefix[n] = '\0';
    return ok;
}
复制代码

 

3.如果没有,则再往上上找一层目录,继续执行2的步骤,直到找到或者prefix[0]0后才会停止

 

那么我们只要把python27下的lib考到客户机上的exe目录下就可以了

 

把测试程序运行一遍以后,正常,接下来就是精简库了, 基本上把test和unittest,email之类的库删掉就可以了

posted @   linyilong  阅读(1121)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· [AI/GPT/综述] AI Agent的设计模式综述
历史上的今天:
2013-12-15 软件架构的一个设想以及谈一下过去两年开发软件的过失
点击右上角即可分享
微信分享提示