python管理包路径之pycharm自动解决包路径注册
作者:???????zxhtom 发布时间:2023-07-14 14:25:38
简介
Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。你可以将它理解成脚本语言,大多情况我也是将它作为写脚本工具的一个方式。
python 目前存在 python2 和 python3 两个大版本,至于他们的区别我们没必要深究,很多新的特性都是在 python3 中引入的,另外 python2 已经停止维护了,所以该选择谁你应该清楚了。
模块化
我们在学习一门语言的时候可以将所有的 demo 放在同一个文件夹,这样方便相互查找,但是在企业级的项目中往往会出现很多功能,正常会根据功能进行分包管理,在大的项目中更有可能分模块管理,不管是分包还是分模块都需要注意一个问题就是如何引用的问题, python 会默认在当前脚本所在文件夹下寻找所需模块,如果当前没有会去其他系统管理模块的地方进行寻找,很明显我们自己的分包分模块的自然不会被找到,这就需要我们进行相应的处理。
不仅仅是 python 语言中, 模块这个概念是凌驾于语言之上,大体上应该分为三类
内置模块 , 在 python中我们可以通过
help('modules')
来查看所有的内置模块
- 第三方模块 , 就是别人封装的工具 ,python中可以通过 `pip install` , Java中通过 Maven管理安装。
- 剩下的就是我们自定义模块了,不是所有牛奶都是特仑苏,也不是所有人封装的都叫做第三方模块,我们个人的封装局限很大仅使用我们自己的项目。
模块导入
模块导入也很方便,除了第三方模块我们需要 通过包管理工具安装一下才能导入,其他模块我们都可以直接导入。
import module_a
: 导入module_a 模块from module_b import module_b_child
: 从 module_b 导入他的方法或者导入他的子模块import module_c as tom_util
: 重命名导入的模块from module_tom import *
: 导入module_tom下所有模块
现在项目中存在两个目录分别为
core
、user
, core 目录中存在的token_util.py
是我们获取 web 开发中登录 token的, 而 user 目录下则是管理用户的脚本,这个时候 user_util.py 依赖与 token_util.py ,那么我们就需要import token_util
。
果不其然出现了经典的
No module named 'token_util'
, 上面我已经说了他只会去寻找默认当前路径和系统模块路径的,更换项目结构是不可能的,那么我们该如何引入 token_util 呢 ?
import sys
print(sys.path)
sys.path.append('../core')
import token_util
通过
sys
模块将 module 模块管理路径打印就能发现只有全局的和当前路径,我们可以将我们需要引入的包的路径注册到模块管理路径中,这样我们就可以引用了。
包
上面导入自定义模块显得很麻烦,随着项目成长会分很多文件夹用来表示不同功能,这里文件夹就是包的概念。但是文件夹和包还是不太一样的。只需要在文件夹下存在一个
__init__.py
就会变成包了。 这个文件就是你在调用包中模块是自动调用,这个文件内容可以为空哦好像有了包的概念还是解决不了上面手动导入的问题,没错这里始终逃不掉需要手动导入的,我们可以将项目的根路径导入到系统路径中,这样我们在导入模块是只需要从根路径出发导入即可。
我们可以写个脚本获取跟路径并注册到系统路径中
import os
import sys
base_dir=os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.pa
th.dirname(os.path.abspath(__file__)))))) # 取到路
径/Users/alex/Documents/work/PyProjects/py8days_camp
print(base_dir)
sys.path.append(base_dir) # 添加到sys.path⾥
如果你还是觉得麻烦,不用担心
pycharm
会帮助我们解决这个问题,我们通过pycharm
打开项目时会自动将项目的跟路径注册到系统路径中。就像Idea 打开Java项目自动会管理 Package 空间一样,
来源:https://juejin.cn/post/7139708627878674463


猜你喜欢
- 本文实例讲述了Python及Django框架生成二维码的方法。分享给大家供大家参考,具体如下:一、包的安装和简单使用1.1 用Python来
- 本文实例讲述了wxPython定时器wx.Timer简单应用。分享给大家供大家参考。具体如下:# -*- coding: utf-8 -*-
- 使用一阶线性方程预测波士顿房价载入的数据是随sklearn一起发布的,来自boston 1993年之前收集的506个房屋的数据和价格。loa
- 连接配置方式如图:有时候Navicat并没有初始化安装sqlncli, 所以连接的时候会报 没有默认驱动,如图:解决方法:在navicat目
- 前言今晚就是新年夜啦,为了 刷一波存在感 送出我的祝福,同时让它看起来不像群发消息,我们简单地用三步来实现定制QQ祝福~
- 介绍在使用matplotlib的过程中,发现不能像matlab一样同时开几个窗口进行比较,于是查询得知了交互模式,但是放在脚本里运行的适合却
- 我用asp+access写程序, sql="select *&
- 分支的新建与合并现在让我们来看一个简单的分支与合并的例子,实际工作中大体也会用到这样的工作流程:开发某个网站。为实现某个新的需求,创建一个分
- 在《JavaScript语言精粹》的第72页有这样一段:用正则表达式字面量创建的RegExp对象来共享同一个单实例:function mak
- 在以前的MySQL版本中是没有窗口函数的,直到MySQL8.0才引入了窗口函数。窗口函数是对查询中的每一条记录执行一个计算,并且这个计算结果
- optim.Adam()解读torch.optim是一个实现了多种优化算法的包,大多数通用的方法都已支持,提供了丰富的接口调用,未来更多精炼
- 目录vuex持久化总结vuex持久化vuex:刷新浏览器,vuex中的state会重新变为初始状态解决办法:使用vuex-persisted
- 两个并发事务同时访问数据库表相同的行时,可能存在以下三个问题:1、幻想读:事务T1读取一条指定where条件的语句,返回结果集。此时事务T2
- 一、简介flask中session组件可分为内置的session组件还有第三方flask-session组件,内置的session组件功能单
- import pandas as pdimport numpy as np一、时间类型及其在python中对应的类型时间戳–timestam
- 函数:endswith()作用:判断字符串是否以指定字符或子字符串结尾,常用于判断文件类型相关函数:判断字符串开头 startswith()
- <!doctype html> <html> <head> <meta charset="
- 大家好,在之前的文章中详细介绍了time和datetime模块的使用。这两个模块更多的是用于处理时间和日期相关的问题。本文介绍的是第三个模块
- 格式化字符串漏洞覆盖大数字时,如果选择一次性输出大数字个字节来进行覆盖,会很久很久,或者直接报错中断,所以来搞个攻防世界高手区的题目来总结一
- 这是为了实现一个效果,而提前作的测试代码!看起来很简单的一个东西,到这会,大约四个小时过去了。不知道是IE6的BUG;还是我自已的BUG!有