模块和包

在计算机程序开发过程中,随着程序代码越来越多,在一个文件里的代码越来越多,越来越不容易维护

为了编写可以维护的代码,我们把很多模块分组,分别放在不同的文件里,这样每个文件里面包含的代码就相对的少

在Python中,每个.py就是一个模块(module)

优点

  1. 提高了代码的可维护性
  2. 每个模块都是可重用的
  3. 避免函数名和变量名冲突

模块分为三类

  1. 内置模块
  2. 第三方模块
  3. 自定义模块

导入模块

#导入xxx模块
import xxx

#从xxx导入xx
from xxx import xx

#起别名x
from xxx import xx as x

#将xxx模块全部导入,调用时不需要xxx.了(不推荐使用)
from xxx import * 

安装第三方模块

pip install xxx

卸载第三方模块

pip uninstall xxx

默认会使用python官方服务器下载,速度比较慢,可以改用国内的源

(从豆瓣安装并将该网址信任)

pip install -i http://pypi.douban.com/simple xxx --trusted-host pypi.douban.com

当你的模块越来越多,就需要对模块进行划分,根据不同的功能分为多个目录,一个目录管理多个模块文件,这个目录称为包

包里面应该有一个__init__.py文件,用于告诉python解析器这是一个包,

示例

#文件路径

imports
    ---text
        ---__init__.py
        ---text1.py
    ---proj
        ---__init__.py
        ---proj1.py
    ---模块.py

在模块.py中导入text1.py文件

from text import text1

在text1.py中导入proj.py文件

import sys
print(sys.path).   #打印python的环境变量,第一个''是当前目录

sys.path.append('/Users/sunlizhao/PycharmProjects/imports')    #将目录路径写入到环境变量中(当前文件有效)

print(sys.path)

现在就可以在text1.py中导入proj.py文件了

from proj import proj1.py

但是这样就把路径给写死,如果项目更换平台就会报错

获取当前文件路径

print(__file__)
#/Users/sunlizhao/PycharmProjects/imports/text/text1.py

但是我们只想获取到imports目录这一层

import sys,os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
print(BASE_DIR)

#/Users/sunlizhao/PycharmProjects/imports

发现这样就向上了两层目录

然后将目录添加到环境变量

sys.path.append(BASE_DIR)
print(sys.path)

这样在pycharm中成功了,但是在终端中很可能会失败,找了一下原因__file__还不是绝对路径

import sys,os

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(BASE_DIR)

from proj import proj1 

相对路径(路径关系比较严格,不常用)

相对路径往上翻不能到程序的目录,在这个例子中,就是不能到imports目录

这样就需要重新更改一下目录结构

imports
    ---tete
        ---text
            ---__init__.py
            ---text1.py
        ---proj
            ---__init__.py
            ---proj1.py
    ---模块.py

在text1.py中导入proj1.py文件

from ..proj import proj1
原文地址:https://www.cnblogs.com/sunlizhao/p/9229460.html