📄 addpack.py
字号:
# This module provides standard support for "packages".## The idea is that large groups of related modules can be placed in# their own subdirectory, which can be added to the Python search path# in a relatively easy way.## The current version takes a package name and searches the Python# search path for a directory by that name, and if found adds it to# the module search path (sys.path). It maintains a list of packages# that have already been added so adding the same package many times# is OK.## It is intended to be used in a fairly stylized manner: each module# that wants to use a particular package, say 'Foo', is supposed to# contain the following code:## from addpack import addpack# addpack('Foo')# <import modules from package Foo>## Additional arguments, when present, provide additional places where# to look for the package before trying sys.path (these may be either# strings or lists/tuples of strings). Also, if the package name is a# full pathname, first the last component is tried in the usual way,# then the full pathname is tried last. If the package name is a# *relative* pathname (UNIX: contains a slash but doesn't start with# one), then nothing special is done. The packages "/foo/bar/bletch"# and "bletch" are considered the same, but unrelated to "bar/bletch".## If the algorithm finds more than one suitable subdirectory, all are# added to the search path -- this makes it possible to override part# of a package. The same path will not be added more than once.## If no directory is found, ImportError is raised._packs = {} # {pack: [pathname, ...], ...}def addpack(pack, *locations): import os if os.path.isabs(pack): base = os.path.basename(pack) else: base = pack if _packs.has_key(base): return import sys path = [] for loc in _flatten(locations) + sys.path: fn = os.path.join(loc, base) if fn not in path and os.path.isdir(fn): path.append(fn) if pack != base and pack not in path and os.path.isdir(pack): path.append(pack) if not path: raise ImportError, 'package ' + pack + ' not found' _packs[base] = path for fn in path: if fn not in sys.path: sys.path.append(fn)def _flatten(locations): locs = [] for loc in locations: if type(loc) == type(''): locs.append(loc) else: locs = locs + _flatten(loc) return locs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -