0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python包模块相对导入from和import介绍2

jf_78858299 来源:梯阅线条小梯子 作者:小梯子 2023-02-21 14:17 次阅读

3.5.3 示例import-python2.7搜索当前包

python2.7先搜索当前包目录,再搜索sys.path模块搜索路径。即先相对再绝对。

本示例在交互模式执行,非文件模式执行。

E**:**\\documents\\F盘\\ 目录不存在pkgmoda.py文件

# 打开cmd,执行下面命令
E:\\documents\\F盘>d:\\Python27\\python
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:25:05) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.pyc
print(sys.path[0]):
run:E:\\documents\\F盘\\pkg1\\pkgmoda.pyc
print(string):<module 'string' from 'd:\\Python27\\lib\\string.pyc'>
run:E:\\documents\\F盘\\pkg1\\main_moda.pyc
# 先搜索当前包目录
print(pkgmoda):<module 'pkg1.pkgmoda' from 'pkg1\\pkgmoda.pyc'>
pkgmoda.index:E:\\documents\\F盘\\pkg1\\pkgmoda.pyc

3.5.4 示例import-python3.7略过当前包

python3.7不搜索当前包目录,直接搜索sys.path模块搜索路径,即绝对导入。

本示例在交互模式执行,非文件模式执行。

E**:**\\documents\\F盘\\ 目录不存在pkgmoda.py文件

# 打开cmd,执行下面命令
E:\\documents\\F盘>d:\\python3\\python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.py
print(sys.path[0]):
# 不搜索当前包目录
Traceback (most recent call last):
 File "", line 1, in 
 File "E:\\documents\\F盘\\pkg1\\main_moda.py", line 4, in 
   import pkgmoda
ModuleNotFoundError: No module named 'pkgmoda'

3.5.5 示例import-python3.7程序目录-文件模式

python3.7直接搜索sys.path模块搜索路径,即绝对导入。

本示例在文件模式执行,非交互模式执行。

E**:**\\documents\\F盘\\ 目录不存在pkgmoda.py文件

# 打开cmd,执行下面命令
E:\\documents\\F盘>d:\\python3\\python pkg1\\main_moda.py
# 程序目录为 pkg1
print(sys.path[0]):E:\\documents\\F盘\\pkg1
run:E:\\documents\\F盘\\pkg1\\pkgmoda.py
print(string):<module 'string' from 'd:\\\\python3\\\\lib\\\\string.py'>
run:E:\\documents\\F盘\\pkg1\\main_moda.py
# 搜索sys.path的程序目录
print(pkgmoda):<module 'pkgmoda' from 'E:\\\\documents\\\\F盘\\\\pkg1\\\\pkgmoda.py'>
pkgmoda.index:E:\\documents\\F盘\\pkg1\\pkgmoda.py

3.5.6 示例import-sys.path

将pkg1\\pkgmoda.py剪切到“E**:**\\documents\\F盘”。

当前包目录没有模块,sys.path的程序目录有模块。

python2.7先当前包目录,在sys.path,

python3.7只sys.path。

本示例在交互模式执行,非文件模式执行。

# python2.7示例
E:\\documents\\F盘>d:\\Python27\\python
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:25:05) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.pyc
print(sys.path[0]):
run:E:\\documents\\F盘\\pkgmoda.py
print(string):<module 'string' from 'd:\\Python27\\lib\\string.pyc'>
run:E:\\documents\\F盘\\pkg1\\main_moda.py
# 搜索程序目录
print(pkgmoda):<module 'pkgmoda' from 'pkgmoda.py'>
pkgmoda.index:E:\\documents\\F盘\\pkgmoda.py
# python3.7示例
E:\\documents\\F盘>d:\\python3\\python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.py
print(sys.path[0]):
run:E:\\documents\\F盘\\pkgmoda.py
print(string):<module 'string' from 'd:\\\\python3\\\\lib\\\\string.py'>
run:E:\\documents\\F盘\\pkg1\\main_moda.py
# 搜索程序目录
print(pkgmoda):<module 'pkgmoda' from 'E:\\\\documents\\\\F盘\\\\pkgmoda.py'>
pkgmoda.index:E:\\documents\\F盘\\pkgmoda.py

3.5.7 示例from点相对导入

“目录文件内容-1”修改 main_moda.py 为相对导入 from **.**import pkgmoda

# main_moda.py
# coding=utf-8
import sys,os
print('print(sys.path[0]):{}'.format(sys.path[0]))
from . import pkgmoda
print('run:{}'.format(os.path.abspath(__file__)))
print('print(pkgmoda):{}'.format(pkgmoda))
print('pkgmoda.index:{}'.format(pkgmoda.index))

本示例在交互模式执行,非文件模式执行。

E**:**\\documents\\F盘\\ 目录不存在pkgmoda.py文件

相对导入from . import module 从当前包搜索。

# python2.7示例
E:\\documents\\F盘>d:\\Python27\\python
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:25:05) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.py
print(sys.path[0]):
run:E:\\documents\\F盘\\pkg1\\pkgmoda.py
print(string):<module 'string' from 'd:\\Python27\\lib\\string.pyc'>
run:E:\\documents\\F盘\\pkg1\\main_moda.py
# python2.7 相对导入从当前包搜索
print(pkgmoda):<module 'pkg1.pkgmoda' from 'pkg1\\pkgmoda.py'>
pkgmoda.index:E:\\documents\\F盘\\pkg1\\pkgmoda.py

# python3.7示例
E:\\documents\\F盘>d:\\python3\\python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.py
print(sys.path[0]):
run:E:\\documents\\F盘\\pkg1\\pkgmoda.py
print(string):<module 'string' from 'd:\\\\python3\\\\lib\\\\string.py'>
run:E:\\documents\\F盘\\pkg1\\main_moda.py
# python3.7 相对导入从当前包搜索
print(pkgmoda):<module 'pkg1.pkgmoda' from 'E:\\\\documents\\\\F盘\\\\pkg1\\\\pkgmoda.py'>
pkgmoda.index:E:\\documents\\F盘\\pkg1\\pkgmoda.py

相对导入只搜索当前包路径,不搜索sys.path路径。

将pkg1\\pkgmoda.py剪切到“E**:**\\documents\\F盘”

# python2.7示例

E:\\documents\\F盘>d:\\Python27\\python
Python 2.7.18 (v2.7.18:8d21aa21f2, Apr 20 2020, 13:25:05) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.py
print(sys.path[0]):
# 只搜索包当前路径,不搜索sys.path路径
Traceback (most recent call last):
 File "", line 1, in 
 File "pkg1\\main_moda.py", line 5, in 
   from . import pkgmoda
ImportError: cannot import name pkgmoda
# python3.7示例

E:\\documents\\F盘>d:\\python3\\python
Python 3.7.8 (tags/v3.7.8:4b47a5b6ba, Jun 28 2020, 07:55:33) [MSC v.1916 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import pkg1.main_moda
run:E:\\documents\\F盘\\pkg1\\__init__.py
print(sys.path[0]):
# 只搜索包当前路径,不搜索sys.path路径
Traceback (most recent call last):
 File "", line 1, in 
 File "E:\\documents\\F盘\\pkg1\\main_moda.py", line 5, in 
   from . import pkgmoda
ImportError: cannot import name 'pkgmoda' from 'pkg1' (E:\\documents\\F盘\\pkg1\\__init__.py)
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程语言
    +关注

    关注

    10

    文章

    1938

    浏览量

    34594
  • 代码
    +关注

    关注

    30

    文章

    4745

    浏览量

    68347
  • python
    +关注

    关注

    56

    文章

    4782

    浏览量

    84450
收藏 人收藏

    评论

    相关推荐

    什么是python模块和库?

    使用 模块名.变量名 的方式访问这个变量。>>> import demo导入成功>>> demo.name'Python编程时光'在导入
    发表于 03-09 16:48

    python花式导的八种方法

    语句导入模块已经够用的。但是在一些特殊场景中,可能还需要其他的导入方式。下面我会一一地给你介绍2. 使用 __
    发表于 03-10 16:51

    python 导入的三个冷门知识点

    1. 使用 __all__ 控制可被导入的变量使用 from module import * 默认情况下会导入 module 里的所有变量,若你只想从
    发表于 03-14 16:33

    python模块和库是什么

    有一个名为 demo.py 的文件,文件内容如下 name="Python编程时光"print("导入成功") 直接使用 import 语句就可以导入
    的头像 发表于 03-09 16:47 2295次阅读

    python花式导的八种方法

    场景中,可能还需要其他的导入方式。 下面我会一一地给你介绍2. 使用 __import__ __import__ 函数可用于
    的头像 发表于 03-10 16:48 2314次阅读

    python模块相对导入fromimport介绍1

    文件**init**.py下,python通过import module导入模块时,先搜索程序运行主目录。 程序运行主目录为运行的
    的头像 发表于 02-21 14:15 1009次阅读

    简述python模块importfrom及all

    python指定导入目录路径,称为导入。 通过importfrom
    的头像 发表于 02-21 14:20 1216次阅读

    浅析python模块创建和fromimport使用

    python模块通过用python程序编写的.py文件即可创建,通过fromimport语句导入
    的头像 发表于 02-21 14:44 804次阅读

    import模块导入方法

    import 语句的基本语法格式如下: import 模块名 # 导入一个模块 import
    的头像 发表于 09-11 17:31 1178次阅读

    rom…import导入代码介绍

    rom…import导入 基本语法格式如下: from 模块import 成员1,成员2,…
    的头像 发表于 09-11 17:35 910次阅读

    如何实现__import__()动态导入

    python2python3中有差异,会导致意外错误. 如果需要动态导入可以使用 importlib 模块 import importli
    的头像 发表于 09-11 17:38 1086次阅读

    Python导入操作和本质

    fun_AA 按 照模块路径导入指定类or方法 在使用时,直接可以使用函数名。比如: fun_AA() 注意事项: from package import item 这种语法中, i
    的头像 发表于 09-12 17:41 869次阅读

    Python import Hook 实现远程导入模块

    所谓的模块 导入,是指在一个模块中使用另一个模块的代码的操作,它有利于代码的复用。 也许你看到这个标题,会说我怎么会发这么基础的文章? 与此相反。恰恰我觉得这篇文章的内容可以算是
    的头像 发表于 11-02 11:45 607次阅读
    <b class='flag-5'>Python</b> <b class='flag-5'>import</b> Hook 实现远程<b class='flag-5'>导入</b><b class='flag-5'>模块</b>

    python如何导入模块

    Python是一种强大的编程语言,它支持模块化编程,使得开发者可以将代码分解为可重用且独立的模块模块是一个包含函数、类和变量等定义的文件,我们可以使用
    的头像 发表于 11-22 14:46 903次阅读

    如何用import导入一个

    Python中,import语句用于导入代码所需的模块模块
    的头像 发表于 11-22 14:59 1101次阅读