首页 文章 精选 留言 我的

精选列表

搜索[解释型编程语言],共10000篇文章
优秀的个人博客,低调大师

木兰编程语言不同运行版本的 Python sys.path 差异小结

上文中的两个问题之一,是发布到 PyPI 的版本在运行时有个测试未通过:测试/引用/引用本地包内py.ul,而开发版和木兰原始可执行文件是通过的。 由于这是第一次发觉 PyPI 发布版本的行为差异,于是优先研究。 问题描述 测试源码如下: using test.package.module_py test.package.module_py.talk() 在项目根目录下(后文如无特别说明,命令运行都在根目录下),有如下测试包结构: test package module_py.py test_module_py.py <--- 该模块在根目录下 开发版如下运行测试无误: $ python3 -m 木兰 测试/引用/引用本地包内py.ul 但如果安装在 PyPI 的发布版,再如下运行相同测试用例则报错(见此 issue): $ 木兰 测试/引用/引用本地包内py.ul 没找到模块:‘test.package’ 调用层级如下 见第1行:using test.package.module_py 但是,发布版如下引用当前目录下的模块并无问题: using test_module_py test_module_py.talk() 为何? 调查过程 由于木兰原始可执行文件运行该测试无误,于是首先对木兰重现项目用 PyInstaller 生成(参考前文)exe 文件进行测试,引用并无问题。 由于无头绪,建立最简项目重现问题,再次确认当前运行目录需添加到 sys.path 才能引用当前目录下的模块 test_module_py(在此前的 commit 中实现)。接下去围绕 sys.path 做一系列测试。 期间试着将 test 目录改名为 tes,结果引用成功。又直接使用__import__('test'),才发现在 Python3 的包路径中,原就存在一个 test 包。 结论 sys.path 在不同运行版本的区别如下: PyPI 发布版:虽然添加了运行当前目录到 sys.path,但位于末尾。在 sys.path 中更靠前的路径中包含 Python3 的包路径,其中恰好存在其他 test 包,而且该包中没有 package 子目录,因而报错。 exe 发布版(用 PyInstaller 生成):sys.path 中不包含 Python3 的包路径,因而不会认错 test 包。 开发版:运行的当前目录位于 sys.path 第一个。sys.path 中虽也包含 Python3 的包路径,但由于顺序靠后,并不起作用,因而不认错 test 包。 由此来看重现项目两种发布版的优劣势: PyPI 发布版:由于自带 Python3 包路径,那么只要是当前 Python3 环境下可用的包,木兰即可引用。副效应就是万一碰到上面这样的同名包,会优先引用 Python3 自带包,而 Python 的行为是优先引用自定义包。 exe 发布版:由于不带 Python3 包路径,木兰将不能引用 Python3 环境下安装的包。当然也就没有同名包的优先问题。但如果用户自行配置了环境变量,使得系统路径中包含 Python3 的包路径,是否会有同样问题尚待确认。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册