python的包引入

news/2024/11/15 1:03:27 标签: python

Python模块导入的基本原理:
 

当您在Python中导入模块时,Python会按照以下顺序搜索模块路径:

  • 当前脚本所在的目录(或称工作目录)
  • 环境变量 PYTHONPATH 指定的目录
  • 标准库和第三方库的安装目录

创建如下结构

my_project/

├── main.py
├── package_a/
│   ├── __init__.py
│   ├── module_a1.py
│   └── module_a2.py
└── package_b/
    ├── __init__.py
    └── module_b1.py

文件内容:

  • package_a/module_a1.py

    def function_a1():
        print("Function A1 from Module A1")
     

  • package_a/module_a2.py

    from .module_a1 import function_a1

    def function_a2():
        print("Function A2 from Module A2")
        function_a1()
     

  • package_b/module_b1.py

    from package_a.module_a1 import function_a1

    def function_b1():
        print("Function B1 from Module B1")
        function_a1()
     

  • main.py

    from package_a.module_a2 import function_a2
    from package_b.module_b1 import function_b1

    function_a2()
    function_b1()
     

上面的main是可以运行成功的,但是如果你在其中
from ../a/a1 import function_a1

就会报错

这是因为

import 语句的语法限制:

  • import 语句中,您需要使用模块名或包名,而不是文件系统路径。
    .和..只能在包内部使用,比如a2中导入a1的方法

 

也可以通过在 main.py 的顶部手动修改 sys.path,但这通常不被推荐,因为它会导致代码的可移植性和可维护性降低。

import sys
import os

# 将上级目录添加到 sys.path
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from a.a1 import function_a1

function_a1()

 

 


http://www.niftyadmin.cn/n/5752521.html

相关文章

Spring Validation参数校验

Validation Validation是Spring提供的一个参数校验框架&#xff0c;使用预定义的注解完成参数校验 使用步骤 引入Spring Validation起步依赖在参数前面加上Pattern注解在需要校验的参数所在的类上添加Validated注解 <!--参数校验依赖--><dependency><groupId&…

【CentOS】中的Firewalld:全面介绍与实战应用(上)

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Linux &#xff1a;从菜鸟到飞鸟的逆袭》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、iptables 时代 2、firewalld 时代 3、 从 ipt…

c++初级--->namespace关键字,输入输出,缺省参数,函数重载

1.namespace关键字&#xff1a; namespace关键字是用于生成一个命名空间&#xff0c;这个空间中可以定义变量&#xff0c;函数&#xff0c;通过这个关键字&#xff0c;可以解决函数在文件展开的时候会因为引用头文件中有相同的变量名而导致的报错&#xff1b; 举例验证&#…

逐行加载 HTML 内容并实时显示效果:使用 wxPython 的实现

这篇博客中&#xff0c;我们将详细分析如何使用 wxPython 构建一个简单的桌面应用程序&#xff0c;用于逐行加载并显示 HTML 文件的内容&#xff0c;并在加载完成后通过浏览器组件呈现最终页面。通过该应用&#xff0c;我们可以体验到逐行加载 HTML 内容的视觉效果&#xff0c;…

Golang | Leetcode Golang题解之第563题二叉树的坡度

题目&#xff1a; 题解&#xff1a; func findTilt(root *TreeNode) (ans int) {var dfs func(*TreeNode) intdfs func(node *TreeNode) int {if node nil {return 0}sumLeft : dfs(node.Left)sumRight : dfs(node.Right)ans abs(sumLeft - sumRight)return sumLeft sumRi…

【MySQL】数据库必备知识:全面整合表的约束与深度解析

前言&#xff1a;本节内容讲述表的约束的相关内容。 表的约束博主将会通过两篇文章进行讲解&#xff0c; 这是第一篇上半部分。 讲到了约束概念。 以及几种常见约束。下面友友们开始学习吧&#xff01; ps:友友们使用了mysql就可以放心观看喽&#xff01; 目录 表的约束概念 …

C语言 | Leetcode C语言题解之第559题N叉树的最大深度

题目&#xff1a; 题解&#xff1a; /*** Definition for a Node.* struct Node {* int val;* int numChildren;* struct Node** children;* };*/int maxDepth(struct Node* root) {if (!root) {return 0;}int depth 0;// 创建空队列const int qCap 10e4 1;str…

MaxKB

docker 安装 MaxKB docker run -d --namemaxkb --restartalways -p 8080:8080 -v ~/.maxkb:/var/lib/postgresql/data -v ~/.python-packages:/opt/maxkb/app/sandbox/python-packages cr2.fit2cloud.com/1panel/maxkbdocker psCONTAINER ID IMAGE …