python import 路径_Python import导入模块 - reload() 导入的内容

import导入模块

1. import 搜索路径In [1]: ls

anaconda-ks.cfg Python-3.7.1/ Python-3.7.1.tgz redis-stable/ redis-stable.tar.gz

In [2]: import sys

In [3]: sys.path

Out[3]:

['/usr/local/python3/bin',

'/usr/local/python3/lib/python37.zip',

'/usr/local/python3/lib/python3.7',

'/usr/local/python3/lib/python3.7/lib-dynload',

'',

'/usr/local/python3/lib/python3.7/site-packages',

'/usr/local/python3/lib/python3.7/site-packages/IPython/extensions',

'/root/.ipython']

In [4]: ls -ll

total 24228

-rw-------. 1 root root 1242 Oct 31 23:04 anaconda-ks.cfg

drwxr-xr-x 19 501 501 4096 Dec 20 02:10 Python-3.7.1/

-rw-r--r-- 1 root root 22802018 Oct 20 14:25 Python-3.7.1.tgz

drwxr-xr-x. 6 1000 1000 4096 Dec 6 00:34 redis-stable/

-rw-r--r--. 1 root root 1993430 Dec 5 01:37 redis-stable.tar.gz

In [5]:路径搜索从上面列出的目录里依次查找要导入的模块文件

'' 表示当前路径

列表中的路径的先后顺序代表了python解释器在搜索模块时的先后顺序

程序执行时添加新的模块路径## 首先给路径添加一个 /home 的路径

In [5]: sys.path.append('/home')

## 可以从最后看到 /home ,那么如果想要放到最前面呢?

In [6]: sys.path

Out[6]:

['/usr/local/python3/bin',

'/usr/local/python3/lib/python37.zip',

'/usr/local/python3/lib/python3.7',

'/usr/local/python3/lib/python3.7/lib-dynload',

'',

'/usr/local/python3/lib/python3.7/site-packages',

'/usr/local/python3/lib/python3.7/site-packages/IPython/extensions',

'/root/.ipython',

'/home']

In [7]:

## 使用insert方法,将 /home 路径插入到 0 的位置

In [7]: sys.path.insert(0,'/home')

## 下面可以看到两个 /home,刚刚插入位置0 的/home 则是在第一位。

In [8]: sys.path

Out[8]:

['/home',

'/usr/local/python3/bin',

'/usr/local/python3/lib/python37.zip',

'/usr/local/python3/lib/python3.7',

'/usr/local/python3/lib/python3.7/lib-dynload',

'',

'/usr/local/python3/lib/python3.7/site-packages',

'/usr/local/python3/lib/python3.7/site-packages/IPython/extensions',

'/root/.ipython',

'/home']

In [9]:

2. 重新导入模块

模块被导入后,import module不能重新导入模块,重新导入需用reload

要演示这个示例,首先需要写一个py文件,用来导入演示:[root@server01 test]# cat reload_test.py

def test():

print("---1---")

[root@server01 test]#

好了,下一步就是在ipython进行import测试一下:In [1]: import reload_test

In [2]: reload_test.test()

---1---

In [3]:

从结果来看,能够正常打印出来test方法当前填写的内容---1--- ,那么如果我现在开另一个窗口,将---1---- 改为 --- 2 --- ,此时再次打印,结果是否会改变呢?

操作如下:

那么,要做什么处理,才可以进行及时更新呢?

是不是重启服务,然后重新导入?那不是很麻烦?下面可以使用reload方法来解决这个问题:In [4]: from imp import reload

/usr/bin/ipython3:1: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses

#!/usr/local/python3/bin/python3.7

In [5]: reload(reload_test)

Out[5]:

In [6]: reload_test.test()

---2---

In [7]:

3. 多模块开发时的注意点

下面这里准备了几个py模块的文件,思考一下,关于import common 变化为 from common import HANDLE_FLAG之后会产生什么样的结果?

首先讲解一下变化的思路:

1、如果使用import common 那么引入的 common.HANDLE_FLAG 在各个模块之间是一个当作一个共享的变量

2、如果使用from common import HANDLE_FLAG,那么单独引入HANDLE_FLAG则不是一个共享变量,当有其中一个模块如果修改了 HANDLE_FLAG的话,那么这个修改后的变量就是这个py模块的局部变量了。

下面可以使用下面的代码来测试一下。recv_msg.py模块from common import RECV_DATA_LIST

# from common import HANDLE_FLAG

import common

def recv_msg():

"""模拟接收到数据,然后添加到common模块中的列表中"""

print("--->recv_msg")

for i in range(5):

RECV_DATA_LIST.append(i)

def test_recv_data():

"""测试接收到的数据"""

print("--->test_recv_data")

print(RECV_DATA_LIST)

def recv_msg_next():

"""已经处理完成后,再接收另外的其他数据"""

print("--->recv_msg_next")

# if HANDLE_FLAG:

if common.HANDLE_FLAG:

print("------发现之前的数据已经处理完成,这里进行接收其他的数据(模拟过程...)----")

else:

print("------发现之前的数据未处理完,等待中....------")handle_msg.py模块from common import RECV_DATA_LIST

# from common import HANDLE_FLAG

import common

def handle_data():

"""模拟处理recv_msg模块接收的数据"""

print("--->handle_data")

for i in RECV_DATA_LIST:

print(i)

# 既然处理完成了,那么将变量HANDLE_FLAG设置为True,意味着处理完成

# global HANDLE_FLAG

# HANDLE_FLAG = True

common.HANDLE_FLAG = True

def test_handle_data():

"""测试处理是否完成,变量是否设置为True"""

print("--->test_handle_data")

# if HANDLE_FLAG:

if common.HANDLE_FLAG:

print("=====已经处理完成====")

else:

print("=====未处理完成====")main.py模块from recv_msg import *

from handle_msg import *

def main():

# 1. 接收数据

recv_msg()

# 2. 测试是否接收完毕

test_recv_data()

# 3. 判断如果处理完成,则接收其它数据

recv_msg_next()

# 4. 处理数据

handle_data()

# 5. 测试是否处理完毕

test_handle_data()

# 6. 判断如果处理完成,则接收其它数据

recv_msg_next()

if __name__ == "__main__":

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值