当前位置: 首页 > news >正文

如何把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之类的库删掉就可以了

转载于:https://www.cnblogs.com/linyilong3/p/4165358.html

相关文章:

  • WPF实现物理效果 拉一个小球
  • Extjs的textfield的颜色设置和出现的问题笔记
  • nginx快速安装
  • 身份证号 js验证 validform
  • Alamofire动态Proxy,报出FAILURE: Error Domain=NSURLErrorDomain Code=-999 cancelled
  • NSPredicate
  • 从tcpdump抓包看TCP/IP协议
  • Linux Redhat 6.5 安装NFS服务
  • java中的Checked Exception和Unchecked Exception的区别
  • Linux常用基本命令:三剑客命令之-awk数组用法
  • 第一个hibernate程序
  • Java 学习(02)--数据类型/类型转换/键盘录入
  • Mac中显示文件夹的大小
  • 逛自己的微博,回顾曾经的那个“我”
  • 定制化vue-cli Template/webpack
  • angular组件开发
  • jquery ajax学习笔记
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • Object.assign方法不能实现深复制
  • React as a UI Runtime(五、列表)
  • text-decoration与color属性
  • 从零到一:用Phaser.js写意地开发小游戏(Chapter 3 - 加载游戏资源)
  • 关于for循环的简单归纳
  • 回顾 Swift 多平台移植进度 #2
  • 区块链技术特点之去中心化特性
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 【云吞铺子】性能抖动剖析(二)
  • 从如何停掉 Promise 链说起
  • ​linux启动进程的方式
  • ###51单片机学习(2)-----如何通过C语言运用延时函数设计LED流水灯
  • (4)Elastix图像配准:3D图像
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (六)库存超卖案例实战——使用mysql分布式锁解决“超卖”问题
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (数据结构)顺序表的定义
  • (循环依赖问题)学习spring的第九天
  • *++p:p先自+,然后*p,最终为3 ++*p:先*p,即arr[0]=1,然后再++,最终为2 *p++:值为arr[0],即1,该语句执行完毕后,p指向arr[1]
  • .NET Entity FrameWork 总结 ,在项目中用处个人感觉不大。适合初级用用,不涉及到与数据库通信。
  • .net refrector
  • .NET 设计模式—简单工厂(Simple Factory Pattern)
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .NET命令行(CLI)常用命令
  • @RequestMapping-占位符映射
  • @RunWith注解作用
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [【JSON2WEB】 13 基于REST2SQL 和 Amis 的 SQL 查询分析器
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [CDOJ 1343] 卿学姐失恋了
  • [c语言]小课堂 day2
  • [FZSZOJ 1223] 上海红茶馆
  • [Go WebSocket] 多房间的聊天室(三)自动清理无人房间
  • [IE技巧] 让IE 以全屏模式启动
  • [IE技巧] 如何让IE 启动的时候不加载任何插件
  • [JavaEE系列] wait(等待) 和 notify(唤醒)
  • [LeetCode] Longest Common Prefix 字符串公有前序