python 自定义模块_Python 自定义模块路径
问题:
假设我们自己写了一个名为 log_config.py 的日志记录程序模块。此模块会被其他程序所引用,如下例子。
import log_config
logger = log_config.log_config("./test_log.txt", "tester")
logger.info("log start.")
logger.info("something happens")
logger.info("log end.")
解决方法:
先看一下目前系统中的Python 路径情况:
Python 2.7.6 (default, Jun 22 2015, 17:58:13)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.path
['', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages']
结果显示,在这几个目录都是 Python 的系统目录。我们的模块可以放在如下二个目录即可。
'/usr/local/lib/python2.7/dist-packages',
'/usr/lib/python2.7/dist-packages'
更进一步:
如果自定义的模块不想与Python 系统的模块放在同一目录下,可以在上面二个目录中增加一个路径文件 user_defined_modules.pth 。此文件内容就是我们自定义模块的存放路径。例子如下:
/home/tom/python_modules/
在 /home/tom/python_module/ 目录中把我们的模块文件 log_config.py 存放好即可。
附录 log_config.py 源码:
此代码可以设置日志文件的生成规则,目录设置的是 1 小时 1 个文件。如果一小时内单个文件大小超过 10 MB会自动分割成多个文件。
#!/usr/bin/python
# encoding=utf-8
#example
#import log_config
#logger = log_config.log_config("./test_log.txt", "tester")
#logger.info("log start")
#logger.info("log end")
#!/usr/bin/env python
# -*- coding:utf-8 -*
""" Setup a Logger which creates a new log file when it
reach up to it limits, such as one hour and file size 10 MB.
"""
__author__ = "Zhiwei Yan"
__copyright__ = "Copyright 2016, The Common tools Project"
__credits__ = ["Zhiwei Yan"]
__license__ = "Apache License"
__version__ = "2.0"
__maintainer__ = "Zhiwei YAN"
__email__ = "jerod.yan@gmail.com"
__status__ = "Production"
import logging
import logging.handlers as handlers
import time, datetime
class SizedTimedRotatingFileHandler(handlers.TimedRotatingFileHandler):
"""
Handler for logging to a set of files, which switches from one file
to the next when the current file reaches a certain size, or at certain
timed intervals
"""
def __init__(self, filename, mode='a', maxBytes=0, backupCount=0, encoding=None,
delay=0, when='h', interval=1, utc=False):
# If rotation/rollover is wanted, it doesn't make sense to use another
# mode. If for example 'w' were specified, then if there were multiple
# runs of the calling application, the logs from previous runs would be
# lost if the 'w' is respected, because the log file would be truncated
# on each run.
if maxBytes > 0:
mode = 'a'
handlers.TimedRotatingFileHandler.__init__(
self, filename, when, interval, backupCount, encoding, delay, utc)
self.maxBytes = maxBytes
def shouldRollover(self, record):
"""
Determine if rollover should occur.
Basically, see if the supplied record would cause the file to exceed
the size limit we have.
"""
if self.stream is None: # delay was set...
self.stream = self._open()
if self.maxBytes > 0: # are we rolling over?
msg = "%s\n" % self.format(record)
self.stream.seek(0, 2) #due to non-posix-compliant Windows feature
if self.stream.tell() + len(msg) >= self.maxBytes:
return 1
t = int(time.time())
if t >= self.rolloverAt:
return 1
return 0
def log_config(log_filename, logger_str):
logging.basicConfig(format = "%(asctime)s" "[%(module)s:%(funcName)s:%(lineno)d]\n" "%(message)s \n")
logger=logging.getLogger(logger_str)
logger.propagate = False
logger.setLevel(logging.DEBUG)
handler=SizedTimedRotatingFileHandler(
log_filename,
maxBytes=10*1024*1024, backupCount=24*30,
when='h',interval=1,
# encoding='bz2', # uncomment for bz2 compression
)
logformatter = logging.Formatter("%(asctime)s" "[%(module)s:%(funcName)s:%(lineno)d]\n" "%(message)s \n")
handler.setFormatter(logformatter)
logger.addHandler(handler)
return logger
python 自定义模块_Python 自定义模块路径相关推荐
- python如何自定义模块_python自定义模块和开源模块使用方法
模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...
- 如何显示python的内置模块_python之模块(内置模块)
内置模块是Python自带的功能,在使用内置模块相应的功能时,需要[先导入]再[使用] 一.sys 用于提供对Python解释器相关的操作: 1 sys.argv #命令行参数List,第一个元素是程 ...
- python中的模块_python的模块和包的详细说明
Python模块和包的详细说明 模块的导入 模块的加载与修改 模块和脚本的说明 模块搜索路径 包的导入 一.模块的导入 之前我们简单的使用了一下模块,并没有详细的介绍,现在我们来详细的说说 1.什么是 ...
- python log模块_Python日志模块-logging
一.logging模块 日志的作用可以简单总结为以下3点: 1.程序调试 2.了解软件程序运行情况,是否正常 3.软件程序运行故障分析与问题定位 1.日志的等级 不同的应用程序所定义的日志等级可能会有 ...
- python dcf估值_Python 常用模块
本节内容 模块介绍 os 模块 sys 模块 time & datetime模块 random 模块 json & picle shutil 模块 shelve 模块 xml 模块 c ...
- python文件操作和模块_Python(五)--模块与文件操作
Python(五)–模块与文件操作 模块和包 模块 模块是包含Python定义和语句的文件,把一组相关函数或代码组织到一个文件中,一个文件即一个模块.模块的文件名 = 模块名+后缀.py 模块之间代码 ...
- python无法导入模块_python导入模块失败的原因是什么
py执行文件和模块同属于同个目录(父级目录),才能直接import模块:如果不在同一目录,可以在python环境下使用sys.path.append(path)添加相关的路径,但在退出python环境 ...
- python贪婪匹配_python re模块匹配贪婪和非贪婪模式详解
python re模块匹配贪婪和非贪婪模式详解 这篇文章主要介绍了python re模块匹配贪婪和非贪婪模式详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友 ...
- python莫比乌斯环_python基础|模块
1 模块简介 在python中常见的模块有三种,在python解释器中的内置模块,第三方模块和自定义模块.模块的有使用python编写的文件,有已被编译为共享库或DLL的C或C++扩展,也有使用C编写 ...
- python import变量_Python import模块调用
开发过程中代码越写越多,在一个文件里代码会越来越长,不容易维护,为了容易维护代码,我们把很多函数分组,分别放在不同的文件里,在Python中,一个.py文件就是模块(Module) 工具/原料 Pyt ...
最新文章
- 怎样用Jenkins触发还有一个Jenkins---Global build solution
- ARPG游戏引擎设计思路
- Linux学习资料-5(密码管理与设定、使用者身份切换、使用者查询、手动增加使用者)...
- 谷歌地图将很快显示电动汽车充电站
- 前端学习(1578):React简介
- 前端都应懂的入门基础-github基础
- 同步PC和MAC OS X文件夹--arrsync-0.4.1
- 怎么在Linux中telnet服务器,Linux系统下Telnet服务器配置
- MySQL不同字段比较大小_mysql 字段定义 对 大小比较的影响
- 银行排队叫号系统项目总结
- linux终端修改键盘格局,如何在Ubuntu桌面中更改键盘布局
- Python强智教务系统模拟登录的两种方式
- QQ群、讨论组上传文件,由于网络原因上传失败?
- 火线精英手游服务器维护,4399火线精英7月4日23:00全区停机维护公告
- 认知世界(1)--学与思
- Java——名片管理系统
- ata驱动框架及scsi请求处理流程
- 华为 IPv6与IPv4
- Mxnet训练自己的数据集并测试
- 安卓OTA升级文件的制作