python import 搜索包路径的机制,以及添加自定义python包的方法

2023-05-16

系统:win10(linux系统也是类似的方法)
python:3.8.3

正文

python import 的搜索方法

在python中,有模块(module)和包(package)这两个概念。
一个.py文件就是一个模块;一个包含__init__.py文件的文件夹就是一个包,也就是模块的集合

python在import时,会从指定的路径中去搜索包。其中有一些是搜索路径的基准。
在终端中利用命令:python -c 'import site;print(site.getsitepackages())'来查看基准路径:

['C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python38', 
'C:\\Users\\username\\AppData\\Local\\Programs\\Python\\Python38\\lib\\site-packages']

然后,可以利用sys.path查看目前所有的搜索路径:

import sys
for path in sys.path:
	print(path)

我的输出如下:

d:\Computer_Programming\python\test
C:\Users\username\AppData\Local\Programs\Python\Python38\python38.zip
C:\Users\username\AppData\Local\Programs\Python\Python38\DLLs
C:\Users\username\AppData\Local\Programs\Python\Python38\lib
C:\Users\username\AppData\Local\Programs\Python\Python38
C:\Users\username\AppData\Roaming\Python\Python38\site-packages
C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages
......

可以看到,其中比基准路径多了很多其他的路径。
第一个是我们的当前路径,python会优先搜索我们当前路径下的包和模块。剩下的也都是python import时的搜索路径

注意

sys.path输出的路径的前后顺序就是python搜索包的前后顺序,这一点一定要注意。

比如,我们修改了python38路径下的一个名为mypackage的包文件夹,但是在python38\lib路径下也有一个同名的包,此时无论怎么修改python38路径下的那个包的内容,最后都影响不到import mypackage,因为python使用的一直都是python38\lib路径下的那个mypackage包


添加和使用自己写的python包

假设我们python包的结构为:

mypackage
--__init__.py
--submodule.py

关于__init__.py文件的使用,以及import … 和 from … import …的说明,见另一篇文章

我们自己写的python包所放的位置有多种选择:

方法一

把mypackage文件夹放在当前路径下,则在当前路径下的.py文件中可以直接:import mypackage。但是这种方法很不方便,如果在另一个路径下写.py文件的话,就得重新copy一份mypackage文件夹到另一路经下。

方法二(使用pth文件)

我们还可以把mypackage文件夹放在任意路径下,比如我放在:d:\Computer_Programming 下。
然后,我们就可以在上述的两个基准路径的其中一个下添加一个.pth文件,文件名任意。内容就是mypackage文件夹所在的路径,即 d:\Computer_Programming:
在这里插入图片描述

然后可以进行验证:

import mypackage
print(mypackage.__file__) # 查看mypackage包的路径
输出如下:
D:\Computer_Programming\mypackage\__init__.py

再用sys.path查看下搜索路径,就可以发现,输出中已经包含 d:\Computer_Programming 路径

方法三(不使用pth文件,常见)

我们还可以把mypackage文件夹放在上述sys.path输出的任一路径下。不过一般放在 ...\Python38\lib\site-packages 这个路径下,因为这个路径下存放的都是第三方包和模块,打开之后可以看到,很多我们安装的第三方包和模块都在这里;
而另一个常见的...\Python38\lib路径下存放的都是内置的包和模块。

所以,把mypackage文件夹放到 ...\Python38\lib\site-packages 路径下,之后不需要.pth文件,就可以直接使用:import mypackage
进行验证:

import mypackage
print(mypackage.__file__) # 查看mypackage包的路径
此时输出如下:
C:\Users\username\AppData\Local\Programs\Python\Python38\lib\site-packages\mypackage\__init__.py
附注

我在windows中,尝试了只将mypackage文件夹的快捷方式(类似于linux下的软链接,因为不想把整个文件夹都copy过去)放在基准路径下,其他一样,最后发现行不通,import mypackage就会报错:

Traceback (most recent call last):
  File "d:\Computer_Programming\python\test\test.py", line 3, in <module>
    import mypackage
ModuleNotFoundError: No module named 'mypackage'

在这里插入图片描述

但是linux系统中,只把创建的指向mypackage的软链接放在基准路径下的话,仍然可以正常使用mypackage包
在这里插入图片描述

参考

site的官方文档:https://docs.python.org/zh-cn/3/library/site.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python import 搜索包路径的机制,以及添加自定义python包的方法 的相关文章

  • 一文了解按位操作符中左移与右移

    无意中看到 gt gt lt lt gt gt gt 说实话一点也不知道这是什么 xff0c 带着好奇心去了解了一下 本文从一个小白的角度看这三个按位操作符的意思 xff0c 会相对好理解 按位操作符操作数字的二进制形式 xff0c 但是返
  • 2080Ti+win10+anaconda+pycharm+tensorflow-gpu(亲测有效)

    参考了很多方法 xff0c 发现一个非常智能的配置环境的方法 不用单独安装vc xff0c vs xff0c cuda xff0c cudnn xff0c 也不用考虑他们的版本搭配问题 xff0c 也不用环境变量的配置 可以通过不同的虚拟环
  • 乐维监控配置HTTPS访问教程

    前提条件 配置前需部署好的乐维监控系统 准备SSL证书 1 1 生成自签名证书 首先 xff0c 先生成自签名证书 这里提供一个快速生成证书的脚本 执行脚本需要输入一个IP或域名的参数 然后会在脚本所在目录下面生成名为ssl crt的证书和
  • Python tkinter布局与按钮间距设置

    新建label与button xff0c 并设置位置 xff08 grid xff09 import tkinter as tk root 61 tk Tk label 61 tk Label root text 61 Label labe
  • 程序设计思维与实践 - CSP - M2

    文章目录 程序设计思维与实践 CSP M2Problem A HRZ的序列DescriptionInputOutputSample InputSample OnputNoteIdeaCodes Problem B HRZ学英语Descrip
  • 程序设计思维与实践 Week8 作业

    文章目录 Problem A 区间选点 IIDescriptionInputOutputSample InputSample OnputNoteIdeaCodes Problem B 猫猫向前冲DescriptionInputOutputS
  • linux操作基础----系统管理

    linux操作基础 系统管理 基于之前三篇 xff1a linux基础操作之文件操作命令 linux基础操作之常用命令 linux基础操作之文件权限 xff0c 查找 xff0c 链接 继续总结linux的命令及操作 xff0c 本次对li
  • 可怕的宇宙射线

    题意 xff1a 宇宙射线会在无限的二维平面上传播 可以看做一个二维网格图 xff0c 初始方向默认向上 宇宙射线会在发射出一段距离后分裂 xff0c 向该方向的左右45 方向分裂出两条宇宙射线 xff0c 同时威力不变 宇宙射线会分裂n次
  • 平衡字符串问题

    题意 xff1a 一个长度为 n 的字符串 s xff0c 其中仅包含 Q W E R 四种字符 如果四种字符在字符串中出现次数均为 n 4 xff0c 则其为一个平衡字符串 现可以将 s 中连续的一段子串替换成相同长度的只包含那四个字符的
  • 买房问题

    题意 xff1a 蒜头君从现在开始工作 xff0c 年薪 NN 万 他希望在蒜厂附近买一套 6060 平米的房子 xff0c 现在价格是 200200 万 假设房子价格以每年百分之 KK 增长 xff0c 并且蒜头君未来年薪不变 xff0c
  • ubuntu 创建raid5教程

    1 查看磁盘 xff1a parted l 2 安装创建raid工具mdadm sudo apt install mdadm 3 创建命令 xff1a sudo mdadm Cv dev md0 l5 n3 dev sdb dev sdc
  • python+tesseract 训练和破解验证码(一)

    利用python及tesseract达到高效破解验证码的方式 xff0c 主要针对彩色背景 xff0c 包含数字 英文字母 xff0c 存在干扰性的简单验证码 前期准备 i window 10 ii python 3 8 iii tesse
  • SpringBoot项目启动不了, 控制台也没输出信息。就是什么反应也没有(已解决)

    1 启动项目 没反应界面 2 解决方法 File Settings Plugins groovy 去掉打勾的所有插件 3 启动成功
  • Django3.0入门【2】ORM关系模型:将model转入数据表

    采用ROM进行对象关系映射 O ObjectR relationM mapping 主要作用 xff1a 简化 SQL编写 xff0c 用对象的方式去替代 在 models py中生成models span class token keyw
  • 阿里云ECS服务器的搭建和部署

    一 购买服务器 1 首先要进行登录 xff0c 如果没有账号可以进行免费注册 xff0c 然后实名认证 xff0c 注册链接如下 xff1a 阿里云注册入口 阿里云注册入口 http www ccusoft com a htm 如下图所示
  • 记一次CentOS 8 部署packstack部署OpenStack失败案例,请直接看最后

    首先你需要一台安装好CentOS8 的虚拟机 xff0c 相关参数如图 两块网卡 xff0c 网卡1 NAT IP 192 168 100 100 GW 61 192 168 100 2 网卡2 可不做配置 能ping通百度 创建完成虚拟机
  • please ensure that VS 2013, VS 2015, VS 2017 or VS 2019 was installed with the Visual C++ option

    first rustup toolchain install stable x86 64 pc windows gnu then rustup default stable x86 64 pc windows gnu end cargo b
  • 顺序表函数

    include 34 Seq h 34 include lt stdlib h gt include lt stdio h gt 创建顺序表 Seq Create Seq s 61 Seq malloc sizeof Seq sizeof
  • Qt Creator中配置Opencascade

    Qt Creator中配置Opencascade 前言 xff1a 由于项目需要使用到STEP STP文件 xff0c 还需要三维建模 xff0c 于是就发现了一个工具 目前网上的资源 xff0c 专门分享这方面内容的是eryar大佬 xf
  • vs运行出错:error MSB8020或error LNK1104: 无法打开文件“opencv_calib3d248d.lib/opencv_contribxxxd.lib”

    error MSB8020 可能错误原因 xff1a 低版本的vs编译高版本的代码会出现这个错误 解决方式 xff1a 转换平台工具集 xff0c 如下 xff0c 改成自己有的 2 在菜单中依次选择 项目 gt 重定解决方案目标 让后F7

随机推荐

  • 倒水问题bfs解题思路

    题目 解题思路 倒水问题为隐式bfs问题 xff0c 初次见到无法马上想到利用bfs的思路解题 xff0c 但是弄清楚其中过程问题便可以引刃而解 此处可类比迷宫问题 flag数组标记两个水杯中的水量状态 xff0c bfs的终止条件即第二杯
  • 网页限制F12,接触教程

    开启右键菜单 document oncontextmenu 61 function return true 开启文字选择 document onselectstart 61 function return true 开启复制 documen
  • 区间覆盖问题-贪心求解

    题目 https vjudge net problem OpenJ Bailian 2376 题目大意 本题给定两个整数n和t xff0c n表示接下来会输入n段区间 xff0c t表示需要覆盖的区间为 1 t 题目要求利用输入的n段区间来
  • DDL问题-贪心算法

    题目 题目大意 本题给出了若干个任务的DDL和对应的分值 xff0c 要求得出最少扣分值 xff0c 也就是求出最大得分 在DDL前完成任务可以得分 xff0c 否则就不能 解题思路 本题与区间覆盖问题有一些相似之处 xff0c 因此在贪心
  • TT 的神秘礼物-二分答案

    题目 题目大意 题目给出了一个长度为N的数组cat xff0c 要求产生新数组ans xff0c 其中ans由所有abs cat i cat j 组成 xff0c 其中i j且1 i xff1c j N 要求求出ans排序后的中位数 xff
  • 【区间选点 II】差分约束

    题目 题意 给定一个数轴上的 n 个区间 xff0c 要求在数轴上选取最少的点使得第 i 个区间 ai bi 里至少有 ci 个点 使用差分约束系统的解法解决这道题 Input 输入第一行一个整数 n 表示区间的个数 xff0c 接下来的
  • 【东东学打牌】复杂模拟

    题目 题意 最近 xff0c 东东沉迷于打牌 所以他找到 HRZ ZJM 等人和他一起打牌 由于人数众多 xff0c 东东稍微修改了亿下游戏规则 xff1a 所有扑克牌只按数字来算大小 xff0c 忽略花色 每张扑克牌的大小由一个值表示 A
  • 【Max Sum Plus Plus】区间dp

    题目 HDU 1024 传送门 题意 东东每个学期都会去寝室接受扫楼的任务 xff0c 并清点每个寝室的人数 每个寝室里面有ai个人 1 lt 61 i lt 61 n 从第i到第j个宿舍一共有sum i j 61 a i 43 43 a
  • 【TT的奖励】动态规划

    题目 题意 在大家不辞辛劳的帮助下 xff0c TT 顺利地完成了所有的神秘任务 神秘人很高兴 xff0c 决定给 TT 一个奖励 xff0c 即白日做梦之捡猫咪游戏 捡猫咪游戏是这样的 xff0c 猫咪从天上往下掉 xff0c 且只会掉在
  • 【ZJM要抵御宇宙射线】CSP模测T2

    题目 题目大意 本题给出平面二维坐标上的若干个点 xff0c 要求选取一个点做圆心 xff0c 此时可以以最短半径包含所有点 xff0c 求出圆心坐标和最短半径平方 xff0c 结果保留两位小数 解题思路 本题乍看只下可能觉得会很复杂 xf
  • 【宇宙狗的危机】CSP模测T4

    题目 题目描述 在瑞神大战宇宙射线中我们了解到了宇宙狗的厉害之处 xff0c 虽然宇宙狗凶神恶煞 xff0c 但是宇宙狗有一 个很可爱的女朋友 最近 xff0c 他的女朋友得到了一些数 xff0c 同时 xff0c 她还很喜欢树 xff0c
  • 【猫睡觉问题】较复杂模拟

    题目 HDU 3700 Cat 题目大意 题目给出一只猫每天若干个时间段有任务 xff0c 没有任务时猫可以睡觉 题目还给出两个数A和B xff0c 表示猫每次睡觉时间不能少于A小时且每次醒着的时间不能多于B小时 题目要求输出一天猫可能睡觉
  • linux 部署django时报错django.core.exceptions.ImproperlyConfigured: mysqlclient 1.4.3 or newer is required

    1 在项目中 init py中这个报错原因 xff0c python 3 5以上版本不支持这种方式 from pymysql import install as MySQLdb install as MySQLdb 解决 xff1a imp
  • 栈求解最大矩形

    题目描述 给一个直方图 xff0c 求直方图中的最大矩形的面积 例如 xff0c 下面这个图片中直方图的高度从左到右分别是2 1 4 5 1 3 3 他们的宽都是1 xff0c 其中最大的矩形是阴影部分 Input 输入包含多组数据 每组数
  • 负权环路问题-SPFA算法的应用

    题目描述 这一晚 xff0c TT 做了个美梦 xff01 在梦中 xff0c TT 的愿望成真了 xff0c 他成为了喵星的统领 xff01 喵星上有 N 个商业城市 xff0c 编号 1 xff5e N xff0c 其中 1 号城市是
  • Ubuntu Linux 安装部署 code-server 在线代码编写环境(含卸载教程)

    Ubuntu Linux 安装部署 code server 在线代码编写环境 xff08 含卸载教程 xff09 安装 code server开启服务及密码修改设置code server开机自启动卸载 code server 安装 code
  • 09 sprintf、printf函数的源码

    实现printf以及Sprintf源码 printf函数的全称为格式化输出函数 之所以叫做格式化出 xff0c 是因为这个函数提供有多种格式化输出方式 xff0c 可以向标准输出中输出某种格式的内容 本文目标是详细的讲述printf函数的用
  • C++后端开发(2.2.3)——POSIX网络API解析

    C 43 43 后端开发 xff08 2 2 3 xff09 POSIXAPI解析 0 前言网络中进程之间如何通信 xff1f POSIX介绍 1 POSIX网络API2 函数与内部过程分析2 1 Socket2 2 bind2 3 lis
  • 用pip查看要安装的python包的所有版本

    我使用的是ubuntu20 04 xff0c windows下操作相同 文章目录 正文附第一点第二点 xff1a 可能出现的bug 正文 首先 xff0c 我的pip版本如下 xff1a 然后 xff0c 就可以通过 xff1a span
  • python import 搜索包路径的机制,以及添加自定义python包的方法

    系统 xff1a win10 xff08 linux系统也是类似的方法 xff09 python xff1a 3 8 3 正文 python import 的搜索方法 在python中 xff0c 有模块 xff08 module xff0