/
usr
/
lib
/
python2.7
/
site-packages
/
setuptools
/
command
/
/usr/lib/python2.7/site-packages/setuptools/command
mkdir
upload
Name
Size
Mode
Actions
alias.py
2426
0644
edit
dl
rm
alias.pyc
3098
0644
edit
dl
rm
alias.pyo
3098
0644
edit
dl
rm
bdist_egg.py
18185
0644
edit
dl
rm
bdist_egg.pyc
18388
0644
edit
dl
rm
bdist_egg.pyo
18388
0644
edit
dl
rm
bdist_rpm.py
1508
0644
edit
dl
rm
bdist_rpm.pyc
1914
0644
edit
dl
rm
bdist_rpm.pyo
1914
0644
edit
dl
rm
bdist_wininst.py
637
0644
edit
dl
rm
bdist_wininst.pyc
1191
0644
edit
dl
rm
bdist_wininst.pyo
1191
0644
edit
dl
rm
build_clib.py
4484
0644
edit
dl
rm
build_clib.pyc
2844
0644
edit
dl
rm
build_clib.pyo
2844
0644
edit
dl
rm
build_ext.py
13173
0644
edit
dl
rm
build_ext.pyc
12571
0644
edit
dl
rm
build_ext.pyo
12527
0644
edit
dl
rm
build_py.py
9596
0644
edit
dl
rm
build_py.pyc
10667
0644
edit
dl
rm
build_py.pyo
10667
0644
edit
dl
rm
develop.py
8046
0644
edit
dl
rm
develop.pyc
7900
0644
edit
dl
rm
develop.pyo
7900
0644
edit
dl
rm
dist_info.py
960
0644
edit
dl
rm
dist_info.pyc
1799
0644
edit
dl
rm
dist_info.pyo
1799
0644
edit
dl
rm
easy_install.py
87032
0644
edit
dl
rm
easy_install.pyc
80382
0644
edit
dl
rm
easy_install.pyo
80325
0644
edit
dl
rm
egg_info.py
24800
0644
edit
dl
rm
egg_info.pyc
25896
0644
edit
dl
rm
egg_info.pyo
25896
0644
edit
dl
rm
install.py
4683
0644
edit
dl
rm
install.pyc
4953
0644
edit
dl
rm
install.pyo
4953
0644
edit
dl
rm
install_egg_info.py
2203
0644
edit
dl
rm
install_egg_info.pyc
3185
0644
edit
dl
rm
install_egg_info.pyo
3185
0644
edit
dl
rm
install_lib.py
3840
0644
edit
dl
rm
install_lib.pyc
4870
0644
edit
dl
rm
install_lib.pyo
4824
0644
edit
dl
rm
install_scripts.py
2439
0644
edit
dl
rm
install_scripts.pyc
2891
0644
edit
dl
rm
install_scripts.pyo
2891
0644
edit
dl
rm
launcher manifest.xml
628
0644
edit
dl
rm
py36compat.py
4986
0644
edit
dl
rm
py36compat.pyc
5550
0644
edit
dl
rm
py36compat.pyo
5550
0644
edit
dl
rm
register.py
270
0644
edit
dl
rm
register.pyc
710
0644
edit
dl
rm
register.pyo
710
0644
edit
dl
rm
rotate.py
2164
0644
edit
dl
rm
rotate.pyc
3036
0644
edit
dl
rm
rotate.pyo
3036
0644
edit
dl
rm
saveopts.py
658
0644
edit
dl
rm
saveopts.pyc
1129
0644
edit
dl
rm
saveopts.pyo
1129
0644
edit
dl
rm
sdist.py
6711
0644
edit
dl
rm
sdist.pyc
7823
0644
edit
dl
rm
sdist.pyo
7823
0644
edit
dl
rm
setopt.py
5085
0644
edit
dl
rm
setopt.pyc
6050
0644
edit
dl
rm
setopt.pyo
6050
0644
edit
dl
rm
test.py
9214
0644
edit
dl
rm
test.pyc
10468
0644
edit
dl
rm
test.pyo
10468
0644
edit
dl
rm
upload.py
1172
0644
edit
dl
rm
upload.pyc
1636
0644
edit
dl
rm
upload.pyo
1636
0644
edit
dl
rm
upload_docs.py
7311
0644
edit
dl
rm
upload_docs.pyc
7842
0644
edit
dl
rm
upload_docs.pyo
7813
0644
edit
dl
rm
__init__.py
594
0644
edit
dl
rm
__init__.pyc
882
0644
edit
dl
rm
__init__.pyo
882
0644
edit
dl
rm
Edit:
/usr/lib/python2.7/site-packages/setuptools/command/build_py.py
(9596B)
from glob import glob from distutils.util import convert_path import distutils.command.build_py as orig import os import fnmatch import textwrap import io import distutils.errors import itertools from setuptools.extern import six from setuptools.extern.six.moves import map, filter, filterfalse try: from setuptools.lib2to3_ex import Mixin2to3 except ImportError: class Mixin2to3: def run_2to3(self, files, doctests=True): "do nothing" class build_py(orig.build_py, Mixin2to3): """Enhanced 'build_py' command that includes data files with packages The data files are specified via a 'package_data' argument to 'setup()'. See 'setuptools.dist.Distribution' for more details. Also, this version of the 'build_py' command allows you to specify both 'py_modules' and 'packages' in the same setup operation. """ def finalize_options(self): orig.build_py.finalize_options(self) self.package_data = self.distribution.package_data self.exclude_package_data = (self.distribution.exclude_package_data or {}) if 'data_files' in self.__dict__: del self.__dict__['data_files'] self.__updated_files = [] self.__doctests_2to3 = [] def run(self): """Build modules, packages, and copy data files to build directory""" if not self.py_modules and not self.packages: return if self.py_modules: self.build_modules() if self.packages: self.build_packages() self.build_package_data() self.run_2to3(self.__updated_files, False) self.run_2to3(self.__updated_files, True) self.run_2to3(self.__doctests_2to3, True) # Only compile actual .py files, using our base class' idea of what our # output files are. self.byte_compile(orig.build_py.get_outputs(self, include_bytecode=0)) def __getattr__(self, attr): "lazily compute data files" if attr == 'data_files': self.data_files = self._get_data_files() return self.data_files return orig.build_py.__getattr__(self, attr) def build_module(self, module, module_file, package): if six.PY2 and isinstance(package, six.string_types): # avoid errors on Python 2 when unicode is passed (#190) package = package.split('.') outfile, copied = orig.build_py.build_module(self, module, module_file, package) if copied: self.__updated_files.append(outfile) return outfile, copied def _get_data_files(self): """Generate list of '(package,src_dir,build_dir,filenames)' tuples""" self.analyze_manifest() return list(map(self._get_pkg_data_files, self.packages or ())) def _get_pkg_data_files(self, package): # Locate package source directory src_dir = self.get_package_dir(package) # Compute package build directory build_dir = os.path.join(*([self.build_lib] + package.split('.'))) # Strip directory from globbed filenames filenames = [ os.path.relpath(file, src_dir) for file in self.find_data_files(package, src_dir) ] return package, src_dir, build_dir, filenames def find_data_files(self, package, src_dir): """Return filenames for package's data files in 'src_dir'""" patterns = self._get_platform_patterns( self.package_data, package, src_dir, ) globs_expanded = map(glob, patterns) # flatten the expanded globs into an iterable of matches globs_matches = itertools.chain.from_iterable(globs_expanded) glob_files = filter(os.path.isfile, globs_matches) files = itertools.chain( self.manifest_files.get(package, []), glob_files, ) return self.exclude_data_files(package, src_dir, files) def build_package_data(self): """Copy data files into build directory""" for package, src_dir, build_dir, filenames in self.data_files: for filename in filenames: target = os.path.join(build_dir, filename) self.mkpath(os.path.dirname(target)) srcfile = os.path.join(src_dir, filename) outf, copied = self.copy_file(srcfile, target) srcfile = os.path.abspath(srcfile) if (copied and srcfile in self.distribution.convert_2to3_doctests): self.__doctests_2to3.append(outf) def analyze_manifest(self): self.manifest_files = mf = {} if not self.distribution.include_package_data: return src_dirs = {} for package in self.packages or (): # Locate package source directory src_dirs[assert_relative(self.get_package_dir(package))] = package self.run_command('egg_info') ei_cmd = self.get_finalized_command('egg_info') for path in ei_cmd.filelist.files: d, f = os.path.split(assert_relative(path)) prev = None oldf = f while d and d != prev and d not in src_dirs: prev = d d, df = os.path.split(d) f = os.path.join(df, f) if d in src_dirs: if path.endswith('.py') and f == oldf: continue # it's a module, not data mf.setdefault(src_dirs[d], []).append(path) def get_data_files(self): pass # Lazily compute data files in _get_data_files() function. def check_package(self, package, package_dir): """Check namespace packages' __init__ for declare_namespace""" try: return self.packages_checked[package] except KeyError: pass init_py = orig.build_py.check_package(self, package, package_dir) self.packages_checked[package] = init_py if not init_py or not self.distribution.namespace_packages: return init_py for pkg in self.distribution.namespace_packages: if pkg == package or pkg.startswith(package + '.'): break else: return init_py with io.open(init_py, 'rb') as f: contents = f.read() if b'declare_namespace' not in contents: raise distutils.errors.DistutilsError( "Namespace package problem: %s is a namespace package, but " "its\n__init__.py does not call declare_namespace()! Please " 'fix it.\n(See the setuptools manual under ' '"Namespace Packages" for details.)\n"' % (package,) ) return init_py def initialize_options(self): self.packages_checked = {} orig.build_py.initialize_options(self) def get_package_dir(self, package): res = orig.build_py.get_package_dir(self, package) if self.distribution.src_root is not None: return os.path.join(self.distribution.src_root, res) return res def exclude_data_files(self, package, src_dir, files): """Filter filenames for package's data files in 'src_dir'""" files = list(files) patterns = self._get_platform_patterns( self.exclude_package_data, package, src_dir, ) match_groups = ( fnmatch.filter(files, pattern) for pattern in patterns ) # flatten the groups of matches into an iterable of matches matches = itertools.chain.from_iterable(match_groups) bad = set(matches) keepers = ( fn for fn in files if fn not in bad ) # ditch dupes return list(_unique_everseen(keepers)) @staticmethod def _get_platform_patterns(spec, package, src_dir): """ yield platform-specific path patterns (suitable for glob or fn_match) from a glob-based spec (such as self.package_data or self.exclude_package_data) matching package in src_dir. """ raw_patterns = itertools.chain( spec.get('', []), spec.get(package, []), ) return ( # Each pattern has to be converted to a platform-specific path os.path.join(src_dir, convert_path(pattern)) for pattern in raw_patterns ) # from Python docs def _unique_everseen(iterable, key=None): "List unique elements, preserving order. Remember all elements ever seen." # unique_everseen('AAAABBBCCDAABBB') --> A B C D # unique_everseen('ABBCcAD', str.lower) --> A B C D seen = set() seen_add = seen.add if key is None: for element in filterfalse(seen.__contains__, iterable): seen_add(element) yield element else: for element in iterable: k = key(element) if k not in seen: seen_add(k) yield element def assert_relative(path): if not os.path.isabs(path): return path from distutils.errors import DistutilsSetupError msg = textwrap.dedent(""" Error: setup script specifies an absolute path: %s setup() arguments must *always* be /-separated paths relative to the setup.py directory, *never* absolute paths. """).lstrip() % path raise DistutilsSetupError(msg)
Save
cmd:
run