谈谈python中的__init__.py

Python3安装lxml 4.4.0以上版本导入etree报错的解决 最近学习python爬虫,在分析网页时需要用到的lxml库的etree模块,本人用Python3.8.7,在安装了最新的4.8.0版本lxml后,from lxml import etree导入语句被pycharm标注红色错误,实验多次发现lxml 4.4.0及其以前的版本不存在这个问题,4.4.1以后的版本都有。于是网上一番搜索学习,最后终于大致弄清楚了原因,并初步解决了问题。 首先,并不是所谓的较新版本的lxml没有etree模块了。即使被pycharm标红,但其实程序是可以正常运行的,也可以得到正确 阅读详情

类似java中的package,python中也通过import语句引入各种python module.

python中的Module是比较重要的概念。常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的.py文件所在的目录,然后import。这样的做法,对于少数文件是可行的,但对于比较大的项目来说,需要有更具效率的方法。这就涉及到python的包的概念,而 __init__.py文件在python 包中起一个比较重要的作用

python在执行import语句时,按照python的文档,它执行了如下操作:
第1步,创建一个新的,空的module对象(它可能包含多个module);
第2步,把这个module对象插入sys.module中
第3步,装载module的代码(如果需要,首先必须编译,我们可以看到程序运行后会多出很多.class文件)
第4步,执行新的module中对应的代码。

在执行第3步时,首先要找到module程序所在的位置,其原理为:
如果需要导入的module的名字是m1,则解释器必须找到m1.py,它首先在当前目录查找,然后是在环境变量PYTHONPATH中查找。 PYTHONPATH可以视为系统的PATH变量一类的东西,其中包含若干个目录。如果PYTHONPATH没有设定,或者找不到m1.py,则继续搜索 与python的安装设置相关的默认路径,在Unix下,通常是/usr/local/lib/python。
事实上,搜索的顺序是:当前路径 (以及从当前目录指定的sys.path),然后是PYTHONPATH,然后是python的安装设置相关的默认路径。正因为存在这样的顺序,如果当前 路径或PYTHONPATH中存在与标准module同样的module,则会覆盖标准module。也就是说,如果当前目录下存在xml.py,那么执 行import xml时,导入的是当前目录下的module,而不是系统标准的xml。

了解了这些,我们就可以先构建一个package,以普通module的方式导入,就可以直接访问此package中的各个module了。

Python中的package定义很简单,其层次结构与程序所在目录的层次结构相同,这一点与Java类似,唯一不同的地方在于,python中的package必须包含一个__init__.py的文件(用于表示此目录是一个python package)。
例如,我们可以这样组织一个package:

package1/
    __init__.py
    subPack1/
        __init__.py
        module_11.py
        module_12.py
        module_13.py
    subPack2/
        __init__.py
        module_21.py
        module_22.py
    ……

__init__.py可以为空,只要它存在,就表明此目录应被作为一个package处理。当然,__init__.py中也可以设置相应的内容,下面以python的serial模块pyserial为例进行说明:

import sys
import importlib

from serial.serialutil import *
#~ SerialBase, SerialException, to_bytes, iterbytes

__version__ = '3.4'

VERSION = __version__

# pylint: disable=wrong-import-position
if sys.platform == 'cli':
    from serial.serialcli import Serial
else:
    import os
    # chose an implementation, depending on os
    if os.name == 'nt':  # sys.platform == 'win32':
        from serial.serialwin32 import Serial
    elif os.name == 'posix':
        from serial.serialposix import Serial, PosixPollSerial, VTIMESerial  # noqa
    elif os.name == 'java':
        from serial.serialjava import Serial
    else:
        raise ImportError("Sorry: no implementation for your platform ('{}') available".format(os.name))


protocol_handler_packages = [
    'serial.urlhandler',
]


def serial_for_url(url, *args, **kwargs):

...
上面是pyserial中serial module中的__init__.py,其会在import module过程中被执行,可用于选取需要装载的模块,比如在python环境下import serial,则__init__.py中的

elif os.name == 'java':
        from serial.serialjava import Serial
语句就会被执行,然后进一步加载Serial类。
另外,在该__init__.py中还定义了serial_for_url函数,引用过serial 模块的脚步也可以当成正常的函数调用



【bug】【Cannot find reference 'imread' in '__init__.py | __init__.py'】 pycharm开启了代码智能提示,opencv模块正确导入了,代码可以正常运行,但是,会有 Cannot find reference 'imread' in '__init__.py | __init__.py' 的warning,而且没有代码提示,不能获取documentation,也不能查看源码,不能提示形参列表,排查了很久,不知道为何。 找到一个相关的问题: python - Cann... 阅读详情

相关推荐

教你在几分钟内构建一个Python包

前言 构建包的过程有些复杂,但从长远来看是值得的,尤其是可以创建属于自己的Python包。本文的目的是通过对构建一个新发行包的案例研究,让您了解需要构建什么以及如何构建python包的基础知识。 开始 首先,您肯定需要设置一个或多个内容,以便了解如何构建python包。因此,需要的东西的如下: IDE (Vs Code) Python 3 构建Python包 本文中构建的标称为b_dist。b_dist是一个分布包,它有Gaussian, Binomial, e.t.c等类。但首先,使用下

803

python爬虫 from lxml import etree 导入模块报错原因

环境:python3.8.5 + lxml4.6.3 编辑器:PyCharm 1. 首先使用解释器环境导入模块看看:from lxml import etree 可以正常读取HTML代码,而且还可以自动匹配提示,如下: 还有一种导入方式: from lxml import html etree = html.etree 同样可以正常解析代码,而且自动匹配提示 2. 虚拟环境导入模块:from lxml import etree 有一个报错信息,我万万没想到的是程序居然可以.

SLQ1893的博客 2万+

maya破解版安装python_Maya mayapy.exe 安装 Cython,编译 pyd

Maya mayapy.exe 安装 Cython,编译 pyd前言在Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑中最后提到,使用 VCForPython27 编译的 pyd,不能在 maya 中使用,这跟编译 mayapy.exe 的 msc 有很大关系,运行 mayapy.exe 就能获取 python 的版本 和 msc 的版本,至于 msc...

weixin_33314040的博客 611

python学习:如何解决 lxml中找不到etree等问题

这个主要是针对在Windows上运行pycharm,lxml和etree下面都报红的问题,自己查找了很久研究出来的。原因:主要是lxml没有这个包的问题,需要安装下: 1.需要在https://www.lfd.uci.edu/~gohlke/pythonlibs/#lxml 下选择你和你对应的pycharm对应的版本下载,下载到桌面上 2.在黑屏终端打开,pip install +桌面上下载好的版...

weixin_40013463的博客 6349

解决lxml没有etree的方法

先 pip uninstall lxml 卸载模块 ,下载压缩包, 然后去找到C:\Program Files\Anaconda3\Lib\site-packages 模块路径,解压就可以了

告别CANoe?手把手教你用Python+PCAN搭建汽车诊断脚本(附完整代码)

本文详细介绍了如何利用Python和PCAN硬件搭建高性价比的汽车诊断自动化方案,替代昂贵的CANoe工具。通过开源库python-can和udsoncan实现UDS诊断协议,涵盖硬件选择、环境配置、核心功能实现及性能优化,附完整代码示例,助力开发者快速构建诊断脚本。

weixin_42551227的博客 373

Python中的import、main、init.py和__main__.py,让我们理解Python的基础知识

今天我要和大家一起探讨Python中的一些重要概念:import、.py和__main__.py。首先,我们来谈谈import。在Python中,import是一种用于导入模块或模块中的函数和变量的关键字。通过import,我们可以在一个Python文件中使用另一个Python文件中定义的函数和变量。举个例子,假设我们有两个Python文件:一个是名为module1.py的文件,另一个是名为main.py的文件。在module1.py中,我们定义了一个函数hello()

Saki_Python的博客 4247

11-4 AEB 算法原理及系统组成

本专题旨在探讨如何利用仿真软件开发自动紧急制动系统AEB,主要通过整理开发流程,实现从需求到验证的全流程掌握,为后续开发提供支持;同时,研究了如何在汽车自动驾驶仿真工具中开发自己的算法,并解决了从ISO、E-CNAP、GB/T以及交通法规等提炼出功能需求的问题,以快速实现原型模型的开发。本专题重点讲解了AEB的工作原理、系统/软件架构和需求、算法模型及实现、CCRs/CCRb/CCRm建模与仿真、VRU-AEB-B/P/M建模与仿真,同时还提供了测试用例,期待将AEB算法成功地产品化。

AIgraphX 8551

理解python中__init__.py和__all__

__ init __.py what is init.py? 通常在一个工程文件里面,我可能会发现在某个文件夹下面会有一个命名为__init__.py的py文件 why need init.py? 在一个工程文件下面,我们可能会有很多的py文件(模块),文件太多,管理很不方便,这时候我们就可以创建一个包(package)对这些文件进行管理,把具有共同特征的文件放在同一个package里面,那该如何...

qq_18824345的博客 2046

Java的API帮助文档

JDK帮助文档 SUN公司为JDK工具包提供了一整套文档资料,我们习惯上称之为JDK文档。 JDK文档中提供了Java中的各种技术的详细资料,以及JDK中提供的各种类的帮助说明。 JDk文档是Java语言的完整说明,大多数书籍中的类的介绍都要参照它来完成,它是编程者经常查阅的资料 如何理解API:就当做是一个“字典”,“使用手册”,API就相当于是一个电子的帮助文档,可以帮我们查看JDK提供的类的信息,平时查看的时候可结合百度一起看。 官网下载: 1、登录Oracle官网(Oracl.

人生得意须尽欢 2万+

FFMPEG音视频开发: Linux下采集音频(alsa-lib库)、视频(V4L2框架)数据编码并实时推流到RTMP流媒体服务器,达到直播功能(推流)

一、环境介绍 操作系统: VM虚拟机运行的ubuntu18.04 FFMPEG版本: 4.4.2 摄像头: 罗技USB摄像头、电脑自带摄像头 声卡:电脑自带声卡 二、FFMPEG、X264的安装 参考这里:FFMPEG开发: Linux下采集摄像头数据录制成MP4视频保存到本: 地https://blog.csdn.net/xiaolong1126626497/article/d...

2989

__init__在python中的用法知乎_理解python中的__init__.py和__call__

__ init __.pywhat is __init__.py?通常在一个工程文件里面,我可能会发现在某个文件夹下面会有一个命名为__init__.py的py文件why need __init__.py?在一个工程文件下面,我们可能会有很多的py文件(模块),文件太多,管理很不方便,这时候我们就可以创建一个包(package)对这些文件进行管理,把具有共同特征的文件放在同一个package里面,...

weixin_42575109的博客 274

YOLOv11改进 | 引入DEConv细节增强卷积模块:恢复细节信息,提升小目标检测精度

摘要: YOLOv11在目标检测中面临小目标检测精度不足的问题,主要由于细节信息丢失。本文提出引入DEConv(细节增强卷积)模块,通过多分支卷积和残差连接恢复高频细节,提升小目标检测性能。DEConv结合3×3卷积与空洞卷积增强边缘信息,并自适应融合特征,兼容YOLOv11的P3层(小目标关键层)且计算高效。实验表明,该改进在无人机航拍、显微镜图像等密集小目标场景中显著减少漏检,同时保持轻量化和实时性优势。代码实现可直接嵌入现有YOLO架构,仅需替换P3层卷积模块。

走向CTO的路上... 948

python命令行编译py_Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑

Python 2.7 cython cythonize py 编译成 pyd 谈谈那些坑前言基于 python27 的 pyc 很容易被反编译,于是想到了pyd,加速运行,安全保护必要准备安装cython:pin install cython假如有以下目录结构:myPackage/__init__.pymyModule.pysubFolder/__init__.pysubModule.pysetu...

weixin_39517289的博客 306

LDRA Testbed(TBrun)软件单元测试_操作指南

通过前面的几篇文章,使用Testbed进行软件静态分析的内容已经基本讲解完毕。从这篇文章开始,将继续讲解如何使用TBrun进行软件单元测试、软件集成测试。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 7764

2025.06.06【Ribo-seq】|riboWaltz:P-site定位与三碱基周期性分析流程

同学们,大家好!今天我们要学习的是riboWaltz——一款专为Ribo-seq(核糖体足迹测序)数据设计的R包,主要用于P-site定位优化和三碱基周期性分析。P-site的准确定位是Ribo-seq下游所有翻译组学分析的基础,riboWaltz为我们提供了系统、可视化、易用的解决方案。P-site定位优化:自动识别不同长度RPF的最佳P-site偏移量。三碱基周期性分析:可视化RPF在CDS、UTR等区域的分布,评估数据质量。多样本/多条件支持:可同时处理多个样本,便于批量分析和对比。

1790

python class super init_python类:super()和__init__()的区别

前言今天来谈谈super()和——init_()它们之间的区别把,单列继承的说法。1、单继承时super()和init()实现的功能是类似的classBase(object):def__init__(self):print'Basecreate'classchildA(Base):def__init__(self):print'creatA',Base.__init__(self...

weixin_39811193的博客 334

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

python类:super()和__init__()的区别

前言 今天来谈谈super()和——init_()它们之间的区别把,单列继承的说法。 1、单继承时super()和init()实现的功能是类似的 def __init__(self): print 'Base create' class childA(Base): def __init__(self): print 'creat A ', ...

qq_39363022的博客 575

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Python老司机教你,花几分钟,构建一个Python包

构建包的过程有些复杂,但从长远来看是值得的,尤其是可以创建属于自己的Python包。本文的目的是通过对构建一个新发行包的案例研究,让您了解需要构建什么以及如何构建python包的基础知识。成功集成TestPyPi之后,现在让我们继续上载到主PyPi,在那里可以使用包名直接进行pip安装,也可以公开使用。所以现在要将我们的包上载到PyPI站点的测试版本,另外要确保pip安装过程是否正常,然后现在要上载到PyPI站点。最后,我们的包已经安装好了。,现在我们的包可以工作了,让我们继续进行下一个部分。

xuezhangmen的博客 1062

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

python基础知识——模块和包 创立和使用

不知道,随便写写。

weixin_53744560的博客 882

python导入模块的本质,关于python导入模块和package的一些深度思考

背景在python中有导入模块和导入package一说,这篇文章主要介绍导入模块和package的一些思考。首先什么是模块?什么是package?模块:用来从逻辑上组织python代码(变量,函数,类),本质上就是以.py结尾的python文件package:本质上就是一个目录,但是必须带一个init.py的文件,它是用来从逻辑上组织模块的import的本质是什么?导入模块的本质:就是把pytho...

weixin_42412939的博客 388

【Python 程序设计】数据人员入门:程序包概念【01/8】

一个坚实的Python项目的基础是掌握模块,包和导入。以下文章是有关 Python 数据工程系列文章的一部分,旨在帮助数据工程师、数据科学家、数据分析师、机器学习工程师或其他刚接触 Python 的人掌握基础知识。

gongdiwudu的专栏 3296

python的包与模块

简记Python导入包与模块 这是一篇Python小白关于包与模块的粗浅认知,用以加深理解。如有错误,请各位前辈多多指教 什么是包与模块 在Python中,我们可以把包与模块理解为文件夹与文件,但仅仅是这样理解,包与文件夹的区别就是包下会有一个__init__.py 文件 ,稍后我们对其进行一段解释。而模块中还包括有 类,变量,函数等元素。 导入包与模块的意义 当我们在完成一个项目的时候,会出现一...

weixin_42893756的博客 435

python代码编辑器在哪里,python自带编程工具

python 工具箱中包含多个工具。在用户角度来讲,Python 工具箱中的工具就像是常规地理工具一样,脚本工具中许多优点同样适用于python工具箱中的工具PythonTurtle画扇形。从开发角度来讲,python工具箱是用python编写的,这个章节描述了创建工具的步骤以及如何定义参数。

2401_82891588的博客 1314

python库文件在哪个文件夹,在python官网下的库

在我以前参与过的项目中,我会将我的库代码和应用程​​序保存在一个项目文件夹中的包含文件夹中.在C/C++土地上,会有一个makefile(或一些make系统)将所有东西挂钩在一起,以便适当地包含所有工作.我现在进入的项目在site-packages文件夹中有自己的库,该文件夹本身位于IronPython / Python系统文件夹中.该库代码是我们的,并且仍然是“热门”并正在进行中.应用程序代码在系统的其他位置.像这样分散代码似乎很奇怪.标签:python,import,ironpython。

Rtee1的博客 342
上一篇: repo常用命令整理
下一篇: python中if __name__ == '__main__': 的解析
LinuxG_G
博客等级 码龄15年 58粉丝 176原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值