本文参考 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 中的 __init__.py的更多相关文章

  1. python 中的__init__.py的用法与个人理解

    使用Python模块常见的情况是,事先写好A.py文件,需要import B.py文件时,先拷贝到当前目录,然后再import 这样的做法在程序量较小的情况下是可行的,如果程序交互复杂程度稍高,就很费 ...

  2. 【转】【Python】Python中的__init__.py与模块导入(from import 找不到模块的问题)

    python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的 ...

  3. Python中的__init__.py的作用

    当用 import 导入该目录时,会执行 __init__.py 里面的代码 因此在__init__.py文件中,把深层的包的路径缩短,别的地方就可以在引用到目录级别时引到深层的包.

  4. python2中的__init__.py文件的作用

    python2中的__init__.py文件的作用: 1.python的每个模块的包中,都必须有一个__init__.py文件,有了这个文件,我们才能导入这个目录下的module. 2.__init_ ...

  5. python中的__init__ 、__new__、__call__小结

    这篇文章主要介绍了python中的__init__ .__new__.__call__小结,需要的朋友可以参考下 1.__new__(cls, *args, **kwargs)  创建对象时调用,返回 ...

  6. Python中的__init__()和__call__()函数

    Python中的__init__()和__call__()函数 在Python的class中有一些函数往往具有特殊的意义.__init__()和__call__()就是class很有用的两类特殊的函数 ...

  7. python中的__init__(self)是什么意思呢

    python中的__init__(self)是什么意思呢 init(self)这个时类的初始化函数 1 2 3 4 class Obj: def init(self): print 1 obj = O ...

  8. python 模块中的 __init__.py __main__.py

    python中文件夹想作为一个模块被引用,则在文件夹内必须要包含 __init__.py 文件,即使此文件为空. 如果此模块想要运行则必须要包含 __main__.py 文件.接下来说下两个文件起到的 ...

  9. Python中的__init__和__new__

    一.__init__ 方法是什么? 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例的时候.例如: # -*- c ...

  10. python中的__init__和__new__的区别

    一.__init__ 方法是什么?(init前后的线是双下划线) 使用Python写过面向对象的代码的同学,可能对 __init__ 方法已经非常熟悉了,__init__ 方法通常用在初始化一个类实例 ...

随机推荐

  1. 基于开源大数据调度系统Taier的Web前端架构选型及技术实践

    原文链接:基于开源大数据调度系统Taier的Web前端架构选型及技术实践 课件获取:关注公众号"数栈研习社",后台私信"Taier"获得直播课件 视频回放:点击 ...

  2. [arc133e]Cyclic Medians

    E - Cyclic Medians 看到中位数,就是经典套路:将\(\geq\)中位数的都赋值为\(1\),\(<\)的赋值为\(0\) 那么对于数\(A\),就等于\(\sum_{i=1}^ ...

  3. TinyVue 智能组件库:基于 MCP 协议,实现 AI 代替人操作 Web 组件

    你好,我是 Kagol,个人公众号:前端开源星球. 2025年6月21日,我在华为开发者大会2025(HDC2025)开源论坛做了一场主题分享,给开发者们介绍我们 OpenTiny 团队基于 MCP ...

  4. RBAC权限模型如何让API访问控制既安全又灵活?

    扫描二维码 关注或者微信搜一搜:编程智域 前端至全栈交流与成长 发现1000+提升效率与开发的AI工具和实用程序:https://tools.cmdragon.cn/ 第四章:访问控制体系 1. RB ...

  5. 精选 10 个 C#/.NET 开发必备开源库!

    DotNetExercises介绍 DotNetGuide专栏C#/.NET/.NET Core编程技巧练习集:C#/.NET/.NET Core编程常用语法.算法.技巧.中间件.类库.工作业务实操练 ...

  6. Github 2FA验证的解决方法

    当前使用GitHub需要启用 2FA 验证,也就是除了账号密码外还有一个实时码,需要额外输入这个正确的实时码才能开启 2FA 验证和后续登陆. 浏览器插件 这是目前我在使用的方法.在浏览器中添加一个叫 ...

  7. JS兼容性复制剪切板

    前言 有时候,navigator.clipboard对象可能会不存在. 因为我们要做一套降级处理! 封装 copy.js function fallbackCopyText(text) { const ...

  8. CF1227G Not Same 题解

    CF1227G Not Same 构造.考虑按照每个数字进行考虑,每次填充一列. 观察样例 \(1\),不难发现可以构造使每一行或列一定有一个位置为 \(0\).我们不妨对于每一列限定这个 \(0\) ...

  9. js入门基础语法

    js入门基础语法 什么是javaScript 概述 javaScript是世界上最流行的一门脚本语言 javaScript是一门很随意的语言 有句话叫做如果可以重新来过我就只愿意学javaScript ...

  10. 官方文档没告诉你的:通过抓包,深入揭秘MCP协议底层通信

    大家好,今天我们来深入探讨一个很有意思的话题--MCP(Model Context Protocol). MCP 是Anthropic发起的一种开放协议,旨在标准化应用程序向大型语言模型(LLM)提供 ...