首页 文章 精选 留言 我的

精选列表

搜索[AI编程语言],共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 的包路径,是否会有同样问题尚待确认。

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Spring

Spring

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

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

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

用户登录
用户注册