下面是针对“浅谈Python2、Python3相对路径、绝对路径导入方法”的完整攻略。
1. Python 2和Python 3的文件路径表示方式
在Python 2中,文件路径表示方式使用的是相对路径和绝对路径。而在Python 3中,新增了一种方式,即使用包(package)的相对路径。下面我们分别来看Python 2和Python 3文件路径表示方式的具体使用方法。
1.1 在Python 2中的文件路径
在Python 2中,文件路径表示方式使用的是相对路径和绝对路径。
1.1.1 相对路径
相对路径表示的是当前脚本所在的路径为起点,向下查找相对路径所表示的目标路径。
例如,当前我们有一个文件夹myproject
,其中包含一个Python文件test.py
,还有一个文件夹mylib
,下面我们演示一下在test.py
中如何使用相对路径导入mylib
文件夹下的mymodule.py
模块。
myproject/test.py
:
from mylib import mymodule
myproject/mylib/mymodule.py
:
def my_function():
print("hello world!")
在test.py
中,我们使用了from mylib import mymodule
语句导入了mymodule.py
模块。这里的mylib
表示当前脚本所在的路径下的mylib
文件夹。
1.1.2 绝对路径
绝对路径表示的是从根目录开始的完整路径,可以直接指定文件所在的目录。
例如,在Linux系统下,我们的代码文件很可能位于/home/myname/myproject/
文件夹中。此时我们可以直接使用/home/myname/myproject/mylib/mymodule.py
作为导入语句。
1.2 在Python 3中的文件路径
在Python 3中,新增了一种我们称之为“包路径”的相对路径表示方式。我们可以使用包路径来导入相同或不同包内的模块。
1.2.1 包路径
使用包路径的方式是在__init__.py
文件中定义属性__path__
,然后通过点号'.'来表示包路径。
例如,在myproject
文件夹下的mylib
文件夹中,有一个名为mymodule.py
的Python文件。如果我们希望从test.py
文件中导入mylib
文件夹中的mymodule.py
模块,可以使用import mylib.mymodule
语句导入。
下面是演示代码:
myproject/mylib/__init__.py
:
__path__ = ['mylib']
myproject/test.py
:
from mylib.mymodule import my_function
myproject/mylib/mymodule.py
:
def my_function():
print("hello world!")
在myproject/mylib/__init__.py
文件中,我们定义了属性__path__
,并将其设置为['mylib']
,表示这个包的文件在当前目录下。
在test.py
中,我们使用了from mylib.mymodule import my_function
语句导入了mymodule.py
模块。
2. 示例说明
接下来,我们通过两个示例来说明Python 2和Python 3中如何使用相对路径和绝对路径导入模块。
2.1 Python 2中的路径导入示例
我们在一个名为test
的父文件夹中放置了两个文件夹a
和b
,以及一个文件test.py
。其中,a
文件夹下放置了一个名为module_a.py
的文件,b
文件夹下放置了一个名为module_b.py
的文件。
test/a/module_a.py
:
def fu_a():
print("Hello, I am module a!\n")
test/b/module_b.py
:
def fu_b():
print("Hello, I am module b!\n")
test/test.py
:
from a.module_a import *
from b.module_b import *
fu_a()
fu_b()
在test.py
文件中,我们先使用了相对路径导入了模块a.module_a
和模块b.module_b
,然后分别调用了这两个模块中的函数。这里需要注意的是,在Python 2中,我们需要使用from module_a import *
这样的语法来导入模块,而不能使用像Python 3那样使用点号导入模块。
2.2 Python 3中的路径导入示例
我们在一个名为project
的父文件夹中放置了两个文件夹lib_a
和lib_b
,以及一个文件main.py
。其中,lib_a
文件夹下放置了一个名为module_a.py
的文件,lib_b
文件夹下放置了一个名为module_b.py
的文件。
project/lib_a/module_a.py
:
def fu_a():
print("Hello, I am module a!\n")
project/lib_b/module_b.py
:
def fu_b():
print("Hello, I am module b!\n")
project/main.py
:
from lib_a.module_a import *
from lib_b.module_b import *
fu_a()
fu_b()
在main.py
文件中,我们依然使用了相对路径导入模块lib_a.module_a
和模块lib_b.module_b
,然后分别调用了这两个模块中的函数。这里需要注意的是,在Python 3中我们使用点号.
来导入模块。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈Python2、Python3相对路径、绝对路径导入方法 - Python技术站