└── project
├── package1
│ ├── module1.py
│ └── module2.py
└── package2
├── __init__.py
├── module3.py
├── module4.py
└── subpackage1
└── module5.py
这里有个目录project
,它包含了两个子目录:package1
和package2
。其中package1
有两个文件:module1.py
和module2.py
。
package2
目录有三个文件:两个模块, module3.py
和module4.py
,也有一个初始化文件 __init__.py
。并且也包括一个目录,subpackage
,它包含一个文件,module5.py
。
重温以下内容:
package1/module2.py
有一个函数,叫function1
package2/__init.py
有一个类,叫class1
package2/subpackage1/module5.py
有一个函数,叫function2
你可以通过以下方法在package1/module1.py文件中导入
导入function1
:
from .module2 import function1
你在这里只需要使用一个点,因为module2.py
和当前的模块module1.py
是在同一个路径下面。
你也可以在package2/module3.py
中导入class1
和function2
通过以下方法:
from . import class1
from .subpackage1.module5 import function2
在第一个导入语句中,单个点代表你从当前包中导入class1
。要谨记,导入一个包实际上是导入包里的__init__.py
文件作为模块。
第二个导入语句中,你再次使用了单个点,这是因为subpackage1
和当前模块module3.py
是在同一个目录中。
相对导入最明显的优点就是非常简洁。取决于当前的位置,它可以将之前那可笑的冗长语句缩减到以下:
from ..subpackage4.module5 import function6
不幸的是,相对导入可能会引起混乱,特别是一些目录结构可能会改变的共享项目。且相对导入不像绝对导入那样可读,不能轻易的从导入语句中查看资源被导入的位置。
好样的!你学完了这个关于绝对导入和相对导入
速成课
。你现在已经掌握了导入的工作原理。并且你也学到了编写导入语句的最佳实践,以及了解了绝对导入和相对导入的异同之处。
现在你可以用你刚刚学到的新技能自信满满的在Python中导入标准库、第三方包和你自己的本地包了。要记住,一般情况下,你应该选择使用绝对导入而不使用相对导入,除非路径非常的复杂,不然会使导入语句冗长。
Hi there, I’m Mbithe! I’m an experienced software engineer with interests in artificial intelligence and machine learning. I’m currently a postgraduate student at The University of Manchester, studying Advanced Computer Science with a specialisation in AI.
大家好,我是Mbithe! 我是一个资深的软件开发工程师,我喜欢人工智能和机器学习。我目前在
曼彻斯特大学
读研,学习
高级计算机科学
,主攻人工智能。
python 中的包和模块,首先是按照代码的功能进行整理整合,想相似功能的代码/大量代 码整理到一起方便统一管理
模块(module):python 中每个 python 文件就是一个模块,每个 python 文件中,封装...
PEP 328 – Imports: Multi-Line and Absolute/RelativePEP 328 – 多行的import和绝对/相对引用
通过后面文档的翻译,先简单总结一下结论:
一、关于from … import …写得太长的问题:
from xxx import aaa,bbb,ccc…如果后面比较长的话,可以使用:
from xxx import (aaa,bbb,ccc,
实际项目中遇到python模块相互引用问题,查资料,终于算是弄明白了。
首先交叉引用或是相互引用,实际上就是导入循环,关于导入循环的详细说明,可见我摘自《python核心编程》第二版的摘抄:Python导入循环方法。
附录给了一种解决交叉引用的方法,试了,不行,但关于交叉引用问题本身说明的很清楚,如果不清楚什么是交叉引用,可看附录一。
循环引用在python圈关注的并不多,语言上没有提供防止循环依赖的机制。
总的来说,应该在总体结构上避免模块之间互相依赖,即:A依赖B,B就不要依赖A,这也是代码重构的一个目标。
对于紧急情况,往往来不及对代码大动。
只要找到导致循环引用的模块(最少两个),把引
绝对引用:
python a/aa.py的时候到底发生了什么
这个时候sys.path.append会将执行文件所在的目录即 a/ 放在sys.path中。后面所有文件的import都会在这个目录下找。如果aa是这样的。
from bb import i
那么很明显可以找到在a/目录下找到bb
但是假如你运行的是python main.py
import a.aa
那么现在加入到sys.path的就
当前工作目录:
所有没有从根文件夹开始的文件名或路径,都可以认定为当前工作目录。
在 Python 中,利用 os.getcwd() 函数可以取得当前工作路径的字符串,还可以利用 os.chdir() 改变它。例如
import os
print(os.getcwd())
os.chdir('F:\python_project')
print(os.getcwd())
绝对路径与相对路径
绝对路径:总是从根文件夹开始,Window 中以盘符(C:、D:)作为根文件夹
相对路径:指文件相对于当前工作目录所在的位置。例如,当前工作目录为 C:\Windows\System32,若 dem
Python 是一门优美简单、功能强大的动态语言。在刚刚接触这门语言时,我们会被其优美的格式、简洁的语法和无穷无尽的类库所震撼。在真正的将python应用到实际的项目中,你会遇到一些无法避免的问题。最让人困惑不解的问题有二类,一
单元格的相对引用是基于包含公式和引用的单元格的相对位置而言的。如果公式所在的单元格的位置改变,引用也将随之改变,如果多行或多列地复制公式,引用会自动调整。默认情况下,新公式使用相对引用;
单元格的绝对引用则总是在指定位置引用单元格(如$F$3)。如果公式所在单元格的位置改变,绝对引用的单元格也始终保持不变,如果多行或多列地复制公式,绝对引用将不作调整。相对引用和绝对引用;
单元格的相对引用是基于包...
http://kuanghy.github.io/2016/07/21/python-import-relative-and-absolute
Python 相对导入与绝对导入,这两个概念是相对于包内导入而言的。包内导入即是包内的模块导入包内部的模块。
Python import 的搜索路径
在当前目录下搜索该模块
在环境变量 PYTHONPATH 中指定的路径列表中依次搜索...