Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python import 【总结】

Python import 【总结】

作者头像
py3study
发布于 2020-01-10 03:38:25
发布于 2020-01-10 03:38:25
7690
举报
文章被收录于专栏:python3python3

Python import总结

1 前言

可能网上很多文章或博客都没解释清楚,作者自己也苦心于Python的import。至此,把自己的总结的分享给大家,本文不做基础讲解,仅说明疑惑的地方。

新版本的Pycharm 2017.1.1,对自己定义的模块都有提示,写代码的提示(如方法,变量)。

2 目录

3 本质

import的本质,针对包和模块来说,对于版本Python2和Python3来说,意义一样的,仅拿Python2做实验说明,Python3不做赘述。Python2版本Python2.7.13,Python3版本Python3.6.1.

3.1 模块

导入模块的本质是把python文件解释和执行一遍。

test.py

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

print("I am test module.")

下面在同级目录TestImport.py中导入该模块:

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import test

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test module.

3.2 包

导入包的本质是执行包下的__init__.py文件。

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

print("I am dir1package.")

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am dir1 package.

4 说明

4.1 导入模块

普通导入import test,模块下的全部对象全部导入,这里不做说明;下面是对模块进行对象的限制导入说明。

test.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

__all__=["A","printInfo"]

A = "Python"

B = "Java"

C = "Php"

def printInfo():

print("I am test module.")

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import test

# from test import *

print(test.A)

print(test.B)

print(test.C)

test.printInfo()

执行python:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Python

Java

Php

I am test module.

发现所有对象都导入了。

使用from x import *导入:

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

# import test

from test import *

print(A)

print(B)

print(C)

printInfo()

执行命令:

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Python

Traceback (most recent call last):

  File"C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py",line 10, in <module>

    print(B)

NameError: name 'B' is not defined

注释掉__all__中没有的对象,如下:

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

# import test

from test import *

print(A)

# print(B)

# print(C)

printInfo()

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Python

I am test module.

总结:模块中__all__对对象的限制,仅对fromimport有效,对import无效

4.2 Python2

4.2.1 导入包

在__init__.py文件中,直接import该包下的模块。

导入dir1包:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

import test11

import test12

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

dir1.test11.printInfo()

dir1.test12.printInfo()

执行命令:

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test11.

I am test12.

在__init__.py文件中,定义__all__导入:

导入dir1包:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

__all__=["test11","test12"]

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

from dir1 import *

test11.printInfo()

test12.printInfo()

执行命令:

C:\Python27\python.exe C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test11.

I am test12.

Python2中用from package import*可导入package下__init__.py文件限制的模块。将解释器切换至Python3,发现也可正常执行。

在__init__.py文件中,使用相对路径导入:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

from . import test11

from . import test12

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

# from dir1 import *

dir1.test11.printInfo()

dir1.test12.printInfo()

或者

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

# import dir1

from dir1 import *

test11.printInfo()

test12.printInfo()

上述Python都能正常运行在Python2中,切换python解释器3,发现也能正常运行。

4.3 Python3

导入dir1包:

dir1/__init__.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

'''

1.这个文件在导入包时,确实会被执行;

'''

import test11

import test12

TestImport.py文件如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

import os,sys

import dir1

dir1.test11.printInfo()

dir1.test12.printInfo()

执行命令:

C:\Python36\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

Traceback (most recent call last):

  File"C:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py",line 6, in <module>

    import dir1

  File"C:\Users\Administrator\PycharmProjects\Foundation\FuckImp\dir1\__init__.py",line 8, in <module>

    importtest11

ModuleNotFoundError: No module named 'test11'

总结:包中__init__.py文件中直接importmodule,调用该包时,Python2中能正常运行,Python3中却异常报错。

5 总结

  1. 针对模块导入,模块中可采取__all__限制from moduleimport *导入的对象,模块的导入Python2和Python3并没有差异,都不会抛出异常;
  2. 针对的导入,Python2中包下__init__文件可直接import对应包下的模块,Python3不能这样导入,需使用相对路径导入(from . import module),而相对路径导入的方法对Python2和Python3都有效;
  3. 针对的导入,Python2中包下__init__文件中使用__all__限制frompackage import *对象时,对Python2和Python3都有效;
  4. 针对从包来导包的导入,例如本例。

下面是dir1下的__init__文件

#!/usr/bin/env python # -*- coding:utf-8 -*- # author: Changhua Gong ''' 1.这个文件在导入包时,确实会被执行; ''' from . import test11 from . import test12

交互式环境

C:\Users\Administrator\PycharmProjects\Foundation>python  顶级目录

>>> from FuckImp import dir1

>>> dir1.test11.printInfo()  # 加上包名就可调用了

I am test11.

在python项目中

         TestImp.py如下:

#!/usr/bin/env python

# -*- coding:utf-8 -*-

# author: Changhua Gong

from FuckImp import dir1

dir1.test11.printInfo()# 加上包名就可调用了

运行

C:\Python27\python.exeC:/Users/Administrator/PycharmProjects/Foundation/FuckImp/TestImport.py

I am test11.

Python2和Python3一样有效

  1. 当import后是package或module时,调用对应的对象时,需加上pkg.module.object或module.object, 如from x import *,可直接调用x下的对象。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/08/17 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ARM架构麒麟系统下,使用docker部署安装LAMP环境
Kylin操作系统是一个中国自主知识产权操作系统,是国家高技术研究发展计划(863计划)的重大成果之一,是以国防科技大学为主导,与中软、联想等单位联合设计和开发的基于Linux的系统,可支持多种微处理器和多种计算机体系结构,具有高性能、高可用性和高安全性,并与Linux应用二进制兼容的国产中文服务器操作系统。
KunkkaWu
2024/06/03
9000
CentOS 7 安装 PHP 7.4.0 正式版
wget https://www.php.net/distributions/php-7.4.0.tar.bz2 tar -jxf php-7.4.0.tar.bz2 cd php-7.4.0 3、配置并构建 PHP。在此步骤您可以使用很多选项自定义 PHP,例如启用某些扩展等。 运行 ./configure –help 命令来获得完整的可用选项清单。 在本示例中,我们仅进行包含 PHP-FPM 和 MySQL 支持的简单配置。
Alone88
2020/09/01
2.9K0
PHP8.0环境详细安装教程
  说明:最近在搭建个人网站,环境有用到PHP,特此记录。本文安装案例是以PHP8.0.0版本为示例,开始安装前建议先将第三步骤抛出异常的依赖安装,这样安装的时候就无需逐个解决问题。
IT学习日记
2022/09/13
4.5K1
PHP8.0环境详细安装教程
CentOS 7 编译安装 PHP 7.4
yum install gd zlib zlib-devel openssl openssl-devel libxml2 libxml2-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libmcrypt libmcrypt-devel
用户10063859
2022/09/23
9770
PHP自动化安装脚本
[root@localhost ~]# vim auto_install_php.sh
子润先生
2021/07/06
5220
编译安装Nginx + PHP + MySQL
编译安装 Nginx # 创建用户和组 groupadd nginx useradd -s /sbin/nologin nginx # 编译安装 ./configure --prefix=/usr/local/nginx --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx/nginx.pid --lock-path=/var/lock/ng
陳斯托洛夫斯記
2022/10/27
1.1K0
php7详细安装教程(linux + nginx +PHP + mysql)
php下载网站:http://cn2.php.net/downloads.php 选择你需要的版本.
conanma
2021/12/02
2.6K0
LAMP环境搭建WordPress自动化安装脚本
此脚本是LAMP环境安装WordPress脚本,有需要朋友可以参考,脚本内容如下:
子润先生
2021/07/06
3890
centos 6.5 编译安装 php 7.3.9
php 5.3.3 以后不再支持 sbin/php-fpm (start|stop|reload),需要使用信号控制。
lukachen
2023/10/22
3480
Linux[CentOS]下编译安装Php7.3 步骤【附编译错误解决】
上一篇讲了如何在Centos下编译安装nginx服务器,但是Nginx服务器目前只能当做静态服务器使用,也即只能展示前端静态页面,没有动态语言来结合。
无道
2019/11/13
4.8K0
Linux[CentOS]下编译安装Php7.3 步骤【附编译错误解决】
Centos下编译php
1.下载php的源码 我是在官网下好,然后通过ftp发给服务器的 2.安装依赖包 sudo yum install gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel \ glibc glibc-devel glib2 glib2-devel openssl-devel bzip2-devel li
治电小白菜
2020/08/25
8770
centos7 编译php环境记录
躺平程序员老修
2023/09/05
2170
CentOS 7.4安装PHP-7.1.5
PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。PHP是目前动态网页开发中使用最为广泛的语言之一。PHP能运行在包括Windows、Linux等在内的绝大多数操作系统环境中
子润先生
2021/07/09
6570
LNMP环境搭建Zabbix监控平台自动化安装脚本
此脚本是LNMP环境搭建Zabbix监控平台自动化安装脚本,有需要朋友可以参考,脚本内容如下:
子润先生
2021/07/06
3480
安装多版本php(php5.6,php7.2)
1,报错:configure: WARNING: unrecognized options: –with-mysql, –with-mcrypt, –with-curlwrappers, –enable-gd-native-ttf 解决:删除–with-mysql –enable-gd-native-ttf –with-mcrypt ,从新安装 安装目录为:–prefix=/usr/local/php7 (可自定义)
全栈程序员站长
2022/08/09
4.9K0
LNMP+FastCGI平台搭建脚本
cmake-2.8.10.2.tar.gz libevent-2.0.21-stable.tar.gz libmcrypt-2.5.8.tar.gz mhash-0.9.9.9.tar.gz nginx-1.2.0.tar.gz php-5.4.9.tar.gz libiconv-1.13.tar.gz MySQL-5.5.13.tar.gz
星哥玩云
2022/07/03
3100
手把手教你在linux编译安装PHP
搭载Lnmp环境的时候总是遇到各种各样的问题,整个人都给你搞的没脾气,由于刚接触Linux出了问题卸了又装卸了又装,太搞人了,这里专门写一篇Linux安装php的详细教程,方便自己也方便刚入坑的你们 本文假定你已经搭载了Linux环境 1.首先安装如下依赖包 yum install -y gcc gcc-c++ make zlib zlib-devel pcre pcre-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5 krb5-devel openssl openssl-devel openldap openldap-devel nss_ldap openldap-clients openldap-servers
切图仔
2022/09/08
2K0
手把手教你在linux编译安装PHP
centos如何安装php7的操作方法
centos如何安装php7的操作方法 方法一、简单安装(通过yum) 1.安装epel-release rpm -ivh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm 2.安装PHP7的rpm源 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm 3.安装PHP7 yum install php70w 方法二、编译安装 1
用户7639835
2021/08/27
4020
LNMP环境自动化安装脚本
3、如果想一个一个的安装LNMP架构,请注意安装顺序:Nginx–>Mysql–>PHP
子润先生
2021/07/06
4490
LAMP环境搭建Zabbix监控平台自动化安装脚本-2
此脚本是LAMP环境搭建Zabbix监控平台自动化安装脚本,有需要朋友可以参考,脚本内容如下:
子润先生
2021/07/06
3680
相关推荐
ARM架构麒麟系统下,使用docker部署安装LAMP环境
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档