首页 > 编程语言 >Python 中的 __init__.py

Python 中的 __init__.py

时间:2024-12-26 15:31:06浏览次数:2  
标签:__ 文件 Python py sys init 导入 import

本文参考 python跨文件夹调用别的文件夹下py文件或参数方式详解

第一章   运行另一个py文件

(1)在file_A.py中运行file_B.py文件,注意这里是运行,不是引用

1 2 3 4 5 import os os.system("python file_B.py para_a1 para_a2") #其他形式 os.system("python file_B.py %s" % para_A) os.system("python file_B.py " + para_A)

需要注意文件路径的写法,在docker中运行文件,文件名前面需要加/,如os.system("python /file_B.py")

(2)file_B.py使用file_A.py传递的参数

1 2 3 4 import sys print(sys.argv) #由打印的结果可知,sys.argv[1:]是命令行传递的参数,sys.argv[0]是命令行运行的文件名 para_B = sys.argv[1]

(3) 引用另一个py文件中的变量或者方法

1 from file_A import df_A

第二章 python调用自己写的py文件

(1)同一个目录下的文件

同一个目录下直接写import xx就好了,xx为自己要调用的模块名字,虽然会有下划线报错,其实,没有错,仍然可以调用,这个下划线可以忽略。

(2)不同目录下的文件

不同路径下的文件先要调用添加路径sys.path.append(r"C:\xxx"),再做引用

1 2 3 4 5 6 7 import sys #首先,添加路径,windows的路径和linux的路径符号不同\\,/,注意区别 #r是为了告诉python这是路径,别#把\n等特殊组合给转译) sys.path.append(r"C:\xxx") #下面import就可以了 import a import b

(3)多个文件在多个目录的调用

首先我们也可以多次写sys.path.append(r"C:\xxx")来添加多个目录,但是这样有点麻烦,每次新建个工程可能就要加很多代码去调用公共单元。

解决方法是添加一个空的__init__.py文件(用于定义包的属性和方法,可以为空),表示这是一个包,比如这样,声明了aaa为一个包,a是内部的方法。

也可以这样,表示bbb是一个包,bb是bbb的子包,b是bb包的内部的方法

如果你需要调用a.py与b.py:

1 2 3 import aaa.a import bbb.bb.b import ccc.c

如果你在c.py文件,想要调用a.py,b.py只需要用到步骤2的知识即可,比如 

1 2 3 4 5 import sys #添加上级目录 sys.path.append("..//") import aaa.a import bbb.bb.b

第三章 关于__init__.py的解释 

__init__.py作用是将文件夹变为一个Python模块,导入包时,事实上是导入了它的__init__.py文件

__init__.py 文件可以为空,但是也可以添加如下两个功能

(1)初始化包中各个模块,批量导入

pack包,配置__init__.py

1

2

import a

import b

导入pack包

访问__init__.py文件中的引用文件,需要加上包名

(2)__init__.py中的__all__,全部导入所声明的模块

此时导入pack包就相当于导入了a.py,b.py,c.py

pack包,配置__init__.py

1

__all__ = ['a', 'b', 'c']

调用

1

from pack import *

第四章 关于pyc与pyo文件

pyc就是py编译时生成的字节码文件,以后每次导入都会执行pyc,当py文件更新时pyc也会更新

如果解释器添加-o命令,py编译时会生成pyo文件,它相比pyc去掉了断言(assert)、断行号以及其他调试信息,运行速度更快

如果使用-OO选项,生成的pyo文件会忽略文档信息

第五章 模块导入时内部的原理

(1)import可导入的对象可以是以下类型:

  • 模块文件(.py文件)
  • C或C++扩展(已编译为共享库或DLL文件)
  • 包(包含多个模块)
  • 内建模块(使用C编写并已链接到Python解释器中)
  • 理解为后缀就是.py、.pyo、.pyc、.pyd、.so、.dll

(2)解释器工作:

1.根据导入的文件名创建命名空间(用来访问文件内部属性与方法)

2.在命名空间内执行源代码

3.创建一个源代码文件的对象,这个对象引用对应的命名空间,管理模块的内部函数与变量

4.一个模块可以多次导入,但是后面导入的模块只执行第三步

sys.modules可以打印出导入的模块名与模块对象的映射

(3)因此可以理解导入文件的三种方式:

  • import a.b:把a.b导入全局命名空间,想要调用c方法需要a.b.c
  • from a import b:把b导入全局命名空间,b.c
  • from a.b import c:把b的属性c直接导入命名空间

总结 

到此这篇关于python跨文件夹调用别的文件夹下py文件或参数方式的文章就介绍到这了,更多相关python跨文件夹调用py文件或参数内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

标签:__,文件,Python,py,sys,init,导入,import
From: https://www.cnblogs.com/freedom-w/p/18632980

相关文章

  • 用echarts绘制的相关地图,热力图层,点,背景等都可修改
    实际项目中用echarts绘制的相关地图,热力图层,点,背景等都可修改,点位可点击。注意事项:项目中安装的echarts版本必须是4.9.0的,"echarts":"^4.9.0","echarts-countries-js":"^1.0.5","echarts-gl":"^1.1.2"效果如下图所示:相关完整的组件代码:<template>......
  • ComfyUI【基础篇】:ComfyUI插件详解,附ComfyUI插件的下载方式示例
    前言我们知道,ComfyUI作为一个基于StableDiffusion的AI绘画创作工具,为用户提供功能丰富和灵活的操作方式。它主要是通过节点流程的方式让用户能够更加精准地定制工作流,而ComfyUI插件则进一步扩展了其能力,使用户能够根据自己的需求定制和增强工作流程。今天我们重点来了......
  • 国标GB28181设备管理软件LiteGBS的ONVIF参数有哪些?
    随着视频技术的不断进步,视频监控、直播、执法记录仪等多种视频资源的应用场景愈发广泛且多样化。为了实现对这些资源的有效整合和统一管理输出,信息化项目中对于视频综合接入能力的需求愈发迫切。那么在实际运用中,需要了解哪些ONVIF参数呢?1、ONVIF消息有效期1)启用“ONVIF消息有......
  • Rocky8.10搭建zabbix​6.4详细教程
    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbixserver与可选组件zabbixagent。zabbixs......
  • AI 驱动的前端开发:从接入到应用的实战指南
    "能不能给我们的应用加上AI功能?"产品经理兴奋地问我。作为一个海外电商网站的前端负责人,我深知AI不是简单地调用几个API就完事了。特别是在前端应用中,如何优雅地集成AI能力,如何处理流式响应,如何优化用户体验,都是需要仔细考虑的问题。最近两个月,我们成功地在项目中......
  • 在Lazarus下的Free Pascal编程教程——在Lazarus中使用计时器组件TTimer
    0.前言我想通过编写一个完整的游戏程序方式引导读者体验程序设计的全过程。我将采用多种方式编写具有相同效果的应用程序,并通过不同方式形成的代码和实现方法的对比来理解程序开发更深层的知识。了解我编写教程的思路,请参阅体现我最初想法的那篇文章中的“1.编程计划”和“2.已......
  • 【comfyui教程】ComfyUI喂饭教程!一个适合新手的工作流搭建思路!
    前言在[《解锁ComfyUI:新手到高手的五级跳》]这篇文章中,我分享了自己学习ComfyUI的五个阶段,而最后一个阶段——创建自己的工作流,尚未详细介绍。今天我就来填坑啦~自己动手,丰衣足食,自己从头到尾搭建一个工作流,才是真正掌握ComfyUI精髓的王道。我们马上开始吧!一、明确目标......
  • Next.js 14 基础入门:从项目搭建到核心概念
    Next.js14带来了许多激动人心的新特性,包括局部渲染、ServerActions增强等。作为一名前端开发者,我最近在项目中升级到了Next.js14,今天就来分享一下从项目搭建到实际应用的完整过程。项目初始化首先,让我们创建一个全新的Next.js14项目:#使用create-next-app创建......
  • 碳化硅晶须:特性、制备与应用
    碳化硅晶须作为一种高性能的无机材料,近年来在材料科学领域备受瞩目。其独特的微观结构赋予了它卓越的性能,在众多领域展现出巨大的应用潜力。本文将从碳化硅晶须的基本特性、制备方法、应用领域以及未来发展趋势等方面进行全方位阐述。一、碳化硅晶须的基本特性(一)微观结构碳......
  • 学习threejs,THREE.RingGeometry 二维平面圆环几何体
    ......