Hello community, here is the log from the commit of package python-wheel for openSUSE:Factory checked in at 2015-04-07 09:29:24 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/python-wheel (Old) and /work/SRC/openSUSE:Factory/.python-wheel.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-wheel" Changes: -------- --- /work/SRC/openSUSE:Factory/python-wheel/python-wheel.changes 2014-02-12 07:08:11.000000000 +0100 +++ /work/SRC/openSUSE:Factory/.python-wheel.new/python-wheel.changes 2015-04-07 09:29:25.000000000 +0200 @@ -1,0 +2,32 @@ +Wed Apr 1 21:04:26 UTC 2015 - [email protected] + +- update to version 0.24.0: + * The python tag used for pure-python packages is now .pyN (major + version only). This change actually occurred in 0.23.0 when the + --python-tag option was added, but was not explicitly mentioned + in the changelog then. + * wininst2wheel and egg2wheel removed. Use "wheel convert + [archive]" instead. + * Wheel now supports setuptools style conditional requirements via + the extras_require={} syntax. Separate 'extra' names from + conditions using the : character. Wheel's own setup.py does + this. (The empty-string extra is the same as install_requires.) + These conditional requirements should work the same whether the + package is installed by wheel or by setup.py. +- additional changes from 0.23.0: + * Compatibiltiy tag flags added to the bdist_wheel command + * sdist should include files necessary for tests + * 'wheel convert' can now also convert unpacked eggs to wheel + * Rename pydist.json to metadata.json to avoid stepping on the PEP + * The --skip-scripts option has been removed, and not generating + scripts is now the default. The option was a temporary approach + until installers could generate scripts themselves. That is now + the case with pip 1.5 and later. Note that using pip 1.4 to + install a wheel without scripts will leave the installation + without entry-point wrappers. The "wheel install-scripts" + command can be used to generate the scripts in such cases. + * Thank you contributors +- removed wininst2wheel and egg2wheel: + they are not in 0.24.0 anymore + +------------------------------------------------------------------- Old: ---- wheel-0.22.0.tar.gz New: ---- wheel-0.24.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ python-wheel.spec ++++++ --- /var/tmp/diff_new_pack.8ooODK/_old 2015-04-07 09:29:25.000000000 +0200 +++ /var/tmp/diff_new_pack.8ooODK/_new 2015-04-07 09:29:25.000000000 +0200 @@ -1,7 +1,7 @@ # # spec file for package python-wheel # -# Copyright (c) 2014 SUSE LINUX Products GmbH, Nuernberg, Germany. +# Copyright (c) 2015 SUSE LINUX GmbH, Nuernberg, Germany. # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: python-wheel -Version: 0.22.0 +Version: 0.24.0 Release: 0 Summary: A built-package format for Python License: MIT @@ -77,7 +77,7 @@ %install python setup.py install --prefix=%{_prefix} --root=%{buildroot} mkdir -p %{buildroot}%{_sysconfdir}/alternatives -for b in egg2wheel wheel wininst2wheel ; do +for b in wheel ; do mv %{buildroot}%{_bindir}/$b %{buildroot}%{_bindir}/$b-%{py_ver} touch %{buildroot}%{_sysconfdir}/alternatives/$b ln -sf %{_sysconfdir}/alternatives/$b %{buildroot}/%{_bindir}/$b @@ -87,9 +87,7 @@ python setup.py test %post -update-alternatives --install %{_bindir}/wheel wheel %{_bindir}/wheel-%{py_ver} 20 \ - --slave %{_bindir}/egg2wheel egg2wheel %{_bindir}/egg2wheel-%{py_ver} \ - --slave %{_bindir}/wininst2wheel wininst2wheel %{_bindir}/wininst2wheel-%{py_ver} +update-alternatives --install %{_bindir}/wheel wheel %{_bindir}/wheel-%{py_ver} 20 %postun if [ $1 -eq 0 ] ; then @@ -99,15 +97,9 @@ %files %defattr(-,root,root,-) %doc CHANGES.txt README.txt LICENSE.txt -%{_bindir}/egg2wheel -%{_bindir}/egg2wheel-%{py_ver} %{_bindir}/wheel %{_bindir}/wheel-%{py_ver} -%{_bindir}/wininst2wheel -%{_bindir}/wininst2wheel-%{py_ver} %ghost %{_sysconfdir}/alternatives/wheel -%ghost %{_sysconfdir}/alternatives/egg2wheel -%ghost %{_sysconfdir}/alternatives/wininst2wheel %{python_sitelib}/wheel-%{version}-py%{py_ver}.egg-info %{python_sitelib}/wheel/ ++++++ wheel-0.22.0.tar.gz -> wheel-0.24.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/CHANGES.txt new/wheel-0.24.0/CHANGES.txt --- old/wheel-0.22.0/CHANGES.txt 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/CHANGES.txt 2014-07-06 18:40:16.000000000 +0200 @@ -1,3 +1,31 @@ +0.24.0 +====== +- The python tag used for pure-python packages is now .pyN (major version + only). This change actually occurred in 0.23.0 when the --python-tag + option was added, but was not explicitly mentioned in the changelog then. +- wininst2wheel and egg2wheel removed. Use "wheel convert [archive]" + instead. +- Wheel now supports setuptools style conditional requirements via the + extras_require={} syntax. Separate 'extra' names from conditions using + the : character. Wheel's own setup.py does this. (The empty-string + extra is the same as install_requires.) These conditional requirements + should work the same whether the package is installed by wheel or + by setup.py. + +0.23.0 +====== +- Compatibiltiy tag flags added to the bdist_wheel command +- sdist should include files necessary for tests +- 'wheel convert' can now also convert unpacked eggs to wheel +- Rename pydist.json to metadata.json to avoid stepping on the PEP +- The --skip-scripts option has been removed, and not generating scripts is now + the default. The option was a temporary approach until installers could + generate scripts themselves. That is now the case with pip 1.5 and later. + Note that using pip 1.4 to install a wheel without scripts will leave the + installation without entry-point wrappers. The "wheel install-scripts" + command can be used to generate the scripts in such cases. +- Thank you contributors + 0.22.0 ====== - Include entry_points.txt, scripts a.k.a. commands, in experimental @@ -10,7 +38,7 @@ - Pregenerated scripts are the default again. - "setup.py bdist_wheel --skip-scripts" turns them off. - setuptools is no longer a listed requirement for the 'wheel' - package. It is of course still required in order for bdist_wheel + package. It is of course still required in order for bdist_wheel to work. - "python -m wheel" avoids importing pkg_resources until it's necessary. @@ -117,8 +145,8 @@ 0.9.5 ===== -- Wheel's own wheel file can be executed by Python, and can install itself: - ``python wheel-0.9.5-py27-none-any/wheel install ...`` +- Wheel's own wheel file can be executed by Python, and can install itself: + ``python wheel-0.9.5-py27-none-any/wheel install ...`` - Use argparse; basic ``wheel install`` command should run with only stdlib dependencies. - Allow requires_dist in setup.cfg's [metadata] section. In addition to diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/LICENSE.txt new/wheel-0.24.0/LICENSE.txt --- old/wheel-0.22.0/LICENSE.txt 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/LICENSE.txt 2014-07-06 18:40:16.000000000 +0200 @@ -1,4 +1,4 @@ -"wheel" copyright (c) 2012 Daniel Holth <[email protected]> and +"wheel" copyright (c) 2012-2014 Daniel Holth <[email protected]> and contributors. The MIT License diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/MANIFEST.in new/wheel-0.24.0/MANIFEST.in --- old/wheel-0.22.0/MANIFEST.in 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/MANIFEST.in 2014-07-06 18:40:16.000000000 +0200 @@ -1,4 +1,7 @@ include wheel/*.txt *.txt *.sh recursive-include wheel/test *.py +include wheel/test/test-1.0-py2.py3-none-win32.whl +include wheel/test/headers.dist/header.h +include wheel/test/pydist-schema.json prune wheel/test/*/dist prune wheel/test/*/build diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/PKG-INFO new/wheel-0.24.0/PKG-INFO --- old/wheel-0.22.0/PKG-INFO 2013-09-16 00:09:16.000000000 +0200 +++ new/wheel-0.24.0/PKG-INFO 2014-07-06 18:56:22.000000000 +0200 @@ -1,8 +1,8 @@ Metadata-Version: 1.1 Name: wheel -Version: 0.22.0 +Version: 0.24.0 Summary: A built-package format for Python. -Home-page: http://bitbucket.org/dholth/wheel/ +Home-page: http://bitbucket.org/pypa/wheel/ Author: Daniel Holth Author-email: [email protected] License: MIT @@ -27,7 +27,7 @@ The wheel documentation is at http://wheel.rtfd.org/. The file format is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/). - The reference implementation is at http://bitbucket.org/dholth/wheel/ + The reference implementation is at https://bitbucket.org/pypa/wheel Why not egg? ------------ @@ -49,6 +49,34 @@ + 0.24.0 + ====== + - The python tag used for pure-python packages is now .pyN (major version + only). This change actually occurred in 0.23.0 when the --python-tag + option was added, but was not explicitly mentioned in the changelog then. + - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]" + instead. + - Wheel now supports setuptools style conditional requirements via the + extras_require={} syntax. Separate 'extra' names from conditions using + the : character. Wheel's own setup.py does this. (The empty-string + extra is the same as install_requires.) These conditional requirements + should work the same whether the package is installed by wheel or + by setup.py. + + 0.23.0 + ====== + - Compatibiltiy tag flags added to the bdist_wheel command + - sdist should include files necessary for tests + - 'wheel convert' can now also convert unpacked eggs to wheel + - Rename pydist.json to metadata.json to avoid stepping on the PEP + - The --skip-scripts option has been removed, and not generating scripts is now + the default. The option was a temporary approach until installers could + generate scripts themselves. That is now the case with pip 1.5 and later. + Note that using pip 1.4 to install a wheel without scripts will leave the + installation without entry-point wrappers. The "wheel install-scripts" + command can be used to generate the scripts in such cases. + - Thank you contributors + 0.22.0 ====== - Include entry_points.txt, scripts a.k.a. commands, in experimental @@ -61,7 +89,7 @@ - Pregenerated scripts are the default again. - "setup.py bdist_wheel --skip-scripts" turns them off. - setuptools is no longer a listed requirement for the 'wheel' - package. It is of course still required in order for bdist_wheel + package. It is of course still required in order for bdist_wheel to work. - "python -m wheel" avoids importing pkg_resources until it's necessary. @@ -168,8 +196,8 @@ 0.9.5 ===== - - Wheel's own wheel file can be executed by Python, and can install itself: - ``python wheel-0.9.5-py27-none-any/wheel install ...`` + - Wheel's own wheel file can be executed by Python, and can install itself: + ``python wheel-0.9.5-py27-none-any/wheel install ...`` - Use argparse; basic ``wheel install`` command should run with only stdlib dependencies. - Allow requires_dist in setup.cfg's [metadata] section. In addition to @@ -263,3 +291,4 @@ Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/README.txt new/wheel-0.24.0/README.txt --- old/wheel-0.22.0/README.txt 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/README.txt 2014-07-06 18:40:16.000000000 +0200 @@ -19,7 +19,7 @@ The wheel documentation is at http://wheel.rtfd.org/. The file format is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/). -The reference implementation is at http://bitbucket.org/dholth/wheel/ +The reference implementation is at https://bitbucket.org/pypa/wheel Why not egg? ------------ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/setup.cfg new/wheel-0.24.0/setup.cfg --- old/wheel-0.22.0/setup.cfg 2013-09-16 00:09:16.000000000 +0200 +++ new/wheel-0.24.0/setup.cfg 2014-07-06 18:56:22.000000000 +0200 @@ -2,18 +2,9 @@ addopts = --ignore=dist --ignore=build --cov=wheel [metadata] -provides-extra = - tool - signatures - faster-signatures -requires-dist = - argparse; python_version == '2.6' - keyring; extra == 'signatures' - dirspec; sys.platform != 'win32' and extra == 'signatures' - ed25519ll; extra == 'faster-signatures' license-file = LICENSE.txt -[wheel] +[bdist_wheel] universal = 1 [egg_info] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/setup.py new/wheel-0.24.0/setup.py --- old/wheel-0.22.0/setup.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/setup.py 2014-07-06 18:48:58.000000000 +0200 @@ -1,4 +1,4 @@ -import os.path, sys, codecs, re +import os.path, codecs, re from setuptools import setup @@ -6,21 +6,10 @@ README = codecs.open(os.path.join(here, 'README.txt'), encoding='utf8').read() CHANGES = codecs.open(os.path.join(here, 'CHANGES.txt'), encoding='utf8').read() -with codecs.open(os.path.join(os.path.dirname(__file__), 'wheel', '__init__.py'), +with codecs.open(os.path.join(os.path.dirname(__file__), 'wheel', '__init__.py'), encoding='utf8') as version_file: metadata = dict(re.findall(r"""__([a-z]+)__ = "([^"]+)""", version_file.read())) -# -# All these requirements are overridden by setup.cfg when wheel is built -# as a wheel: -# -signature_reqs = ['keyring'] -if sys.platform != 'win32': - signature_reqs.append('dirspec') -install_requires = [] -if sys.version_info[:2] < (2, 7): - install_requires.append('argparse') - setup(name='wheel', version=metadata['version'], description='A built-package format for Python.', @@ -35,22 +24,24 @@ "Programming Language :: Python :: 3", "Programming Language :: Python :: 3.2", "Programming Language :: Python :: 3.3", + "Programming Language :: Python :: 3.4", ], author='Daniel Holth', author_email='[email protected]', - url='http://bitbucket.org/dholth/wheel/', + url='http://bitbucket.org/pypa/wheel/', keywords=['wheel', 'packaging'], license='MIT', packages=[ - 'wheel', - 'wheel.test', - 'wheel.tool', + 'wheel', + 'wheel.test', + 'wheel.tool', 'wheel.signatures' ], - install_requires=install_requires, extras_require={ - 'signatures': signature_reqs, - 'faster-signatures': ['ed25519ll'], + ':python_version=="2.6"': ['argparse'], + 'signatures': ['keyring'], + 'signatures:sys_platform!="win32"': ['pyxdg'], + 'faster-signatures': ['ed25519ll'], 'tool': [] }, tests_require=['jsonschema', 'pytest', 'coverage', 'pytest-cov'], @@ -58,8 +49,6 @@ zip_safe=False, entry_points = """\ [console_scripts] -wininst2wheel = wheel.wininst2wheel:main -egg2wheel = wheel.egg2wheel:main wheel = wheel.tool:main [distutils.commands] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/__init__.py new/wheel-0.24.0/wheel/__init__.py --- old/wheel-0.22.0/wheel/__init__.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/__init__.py 2014-07-06 18:40:16.000000000 +0200 @@ -1,2 +1,2 @@ # __variables__ with double-quoted values will be available in setup.py: -__version__ = "0.22.0" +__version__ = "0.24.0" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/bdist_wheel.py new/wheel-0.24.0/wheel/bdist_wheel.py --- old/wheel-0.22.0/wheel/bdist_wheel.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/bdist_wheel.py 2014-07-06 18:40:16.000000000 +0200 @@ -71,12 +71,15 @@ ('group=', 'g', "Group name used when creating a tar file" " [default: current group]"), - ('skip-scripts', None, - "skip building the setuptools console_scripts", - "(default: false)"), + ('universal', None, + "make a universal wheel" + " (default: false)"), + ('python-tag=', None, + "Python implementation compatibility tag" + " (default: py%s)" % get_impl_ver()[0]), ] - boolean_options = ['keep-temp', 'skip-build', 'relative'] + boolean_options = ['keep-temp', 'skip-build', 'relative', 'universal'] def initialize_options(self): self.bdist_dir = None @@ -92,7 +95,8 @@ self.relative = False self.owner = None self.group = None - self.skip_scripts = False + self.universal = False + self.python_tag = 'py' + get_impl_ver()[0] def finalize_options(self): if self.bdist_dir is None: @@ -108,6 +112,14 @@ self.root_is_purelib = self.distribution.is_pure() + # Support legacy [wheel] section for setting universal + wheel = self.distribution.get_option_dict('wheel') + if 'universal' in wheel: + # please don't define this in your global configs + val = wheel['universal'][1].strip() + if val.lower() in ('1', 'true', 'yes'): + self.universal = True + @property def wheel_dist_name(self): """Return distribution full name with - replaced with _""" @@ -117,31 +129,24 @@ def get_tag(self): supported_tags = pep425tags.get_supported() - purity = self.distribution.is_pure() - impl_ver = get_impl_ver() - abi_tag = 'none' - plat_name = 'any' - impl_name = 'py' - if purity: - wheel = self.distribution.get_option_dict('wheel') - if 'universal' in wheel: - # please don't define this in your global configs - val = wheel['universal'][1].strip() - if val.lower() in ('1', 'true', 'yes'): - impl_name = 'py2.py3' - impl_ver = '' - tag = (impl_name + impl_ver, abi_tag, plat_name) + if self.distribution.is_pure(): + if self.universal: + impl = 'py2.py3' + else: + impl = self.python_tag + tag = (impl, 'none', 'any') else: plat_name = self.plat_name if plat_name is None: plat_name = get_platform() plat_name = plat_name.replace('-', '_').replace('.', '_') impl_name = get_abbr_impl() + impl_ver = get_impl_ver() # PEP 3149 -- no SOABI in Py 2 # For PyPy? # "pp%s%s" % (sys.pypy_version_info.major, # sys.pypy_version_info.minor) - abi_tag = sysconfig.get_config_vars().get('SOABI', abi_tag) + abi_tag = sysconfig.get_config_vars().get('SOABI', 'none') if abi_tag.startswith('cpython-'): abi_tag = 'cp' + abi_tag.rsplit('-', 1)[-1] @@ -176,10 +181,11 @@ install.skip_build = self.skip_build install.warn_dir = False - if self.skip_scripts: - # A wheel without setuptools scripts is more cross-platform. - install_scripts = self.reinitialize_command('install_scripts') - install_scripts.no_ep = True + # A wheel without setuptools scripts is more cross-platform. + # Use the (undocumented) `no_ep` option to setuptools' + # install_scripts command to avoid creating entry point scripts. + install_scripts = self.reinitialize_command('install_scripts') + install_scripts.no_ep = True # Use a custom scheme for the archive, because we have to decide # at installation time which scheme to use. @@ -281,19 +287,19 @@ return metadata['license_file'][1] def setupcfg_requirements(self): - """Generate requirements from setup.cfg as + """Generate requirements from setup.cfg as ('Requires-Dist', 'requirement; qualifier') tuples. From a metadata section in setup.cfg: - + [metadata] provides-extra = extra1 extra2 requires-dist = requirement; qualifier another; qualifier2 unqualified - + Yields - + ('Provides-Extra', 'extra1'), ('Provides-Extra', 'extra2'), ('Requires-Dist', 'requirement; qualifier'), @@ -381,8 +387,8 @@ metadata_path = os.path.join(distinfo_path, 'METADATA') self.add_requirements(metadata_path) - # XXX not a final specification - metadata_json_path = os.path.join(distinfo_path, 'pydist.json') + # XXX intentionally a different path than the PEP. + metadata_json_path = os.path.join(distinfo_path, 'metadata.json') pymeta = pkginfo_to_dict(metadata_path, distribution=self.distribution) @@ -393,16 +399,14 @@ description_filename) with open(description_path, "wb") as description_file: description_file.write(description_text.encode('utf-8')) - pymeta['document_names'] = pymeta.get('document_names', {}) - pymeta['document_names']['description'] = description_filename + pymeta['extensions']['python.details']['document_names']['description'] = description_filename # XXX heuristically copy any LICENSE/LICENSE.txt? license = self.license_file() if license: license_filename = 'LICENSE.txt' shutil.copy(license, os.path.join(self.distinfo_dir, license_filename)) - pymeta['document_names'] = pymeta.get('document_names', {}) - pymeta['document_names']['license'] = license_filename + pymeta['extensions']['python.details']['document_names']['license'] = license_filename with open(metadata_json_path, "w") as metadata_json: json.dump(pymeta, metadata_json) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/egg2wheel.py new/wheel-0.24.0/wheel/egg2wheel.py --- old/wheel-0.22.0/wheel/egg2wheel.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/egg2wheel.py 2014-07-06 18:40:16.000000000 +0200 @@ -5,9 +5,9 @@ import tempfile import zipfile import wheel.bdist_wheel +import shutil import distutils.dist from distutils.archive_util import make_archive -from shutil import rmtree from argparse import ArgumentParser from glob import iglob @@ -16,9 +16,20 @@ def egg2wheel(egg_path, dest_dir): egg_info = egg_info_re.match(os.path.basename(egg_path)).groupdict() - egg = zipfile.ZipFile(egg_path) dir = tempfile.mkdtemp(suffix="_e2w") - egg.extractall(dir) + if os.path.isfile(egg_path): + # assume we have a bdist_egg otherwise + egg = zipfile.ZipFile(egg_path) + egg.extractall(dir) + else: + # support buildout-style installed eggs directories + for pth in os.listdir(egg_path): + src = os.path.join(egg_path, pth) + if os.path.isfile(src): + shutil.copy2(src, dir) + else: + shutil.copytree(src, os.path.join(dir, pth)) + dist_info = "%s-%s" % (egg_info['name'], egg_info['ver']) abi = 'none' pyver = egg_info['pyver'].replace('.', '') @@ -41,7 +52,7 @@ bw.write_record(dir, dist_info_dir) filename = make_archive(os.path.join(dest_dir, wheel_name), 'zip', root_dir=dir) os.rename(filename, filename[:-3] + 'whl') - rmtree(dir) + shutil.rmtree(dir) def main(): parser = ArgumentParser() diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/metadata.py new/wheel-0.24.0/wheel/metadata.py --- old/wheel-0.22.0/wheel/metadata.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/metadata.py 2014-07-06 18:40:16.000000000 +0200 @@ -49,7 +49,7 @@ def handle_requires(metadata, pkg_info, key): """ - Place the runtime requirements from pkg_info into metadata. + Place the runtime requirements from pkg_info into metadata. """ may_requires = defaultdict(list) for value in pkg_info.get_all(key): @@ -85,15 +85,16 @@ def pkginfo_to_dict(path, distribution=None): """ Convert PKG-INFO to a prototype Metadata 2.0 (PEP 426) dict. - - The description is included under the key ['description'] rather than + + The description is included under the key ['description'] rather than being written to a separate file. - + path: path to PKG-INFO file distribution: optional distutils Distribution() """ - metadata = {"generator":"bdist_wheel (" + wheel.__version__ + ")"} + metadata = defaultdict(lambda: defaultdict(lambda: defaultdict(dict))) + metadata["generator"] = "bdist_wheel (" + wheel.__version__ + ")" try: unicode pkg_info = read_pkg_info(path) @@ -141,7 +142,10 @@ metadata['extras'].extend(pkg_info.get_all(key)) elif low_key == 'home_page': - metadata['project_urls'] = {'Home':pkg_info[key]} + metadata['extensions']['python.details']['project_urls'] = {'Home':pkg_info[key]} + + elif low_key == 'keywords': + metadata['keywords'] = KEYWORDS_RE.split(pkg_info[key]) else: metadata[low_key] = pkg_info[key] @@ -173,7 +177,7 @@ contact['role'] = role contacts.append(contact) if contacts: - metadata['contacts'] = contacts + metadata['extensions']['python.details']['contacts'] = contacts # convert entry points to exports try: @@ -186,17 +190,17 @@ name, export = str(item).split(' = ', 1) exports[group][name] = export if exports: - metadata['exports'] = exports + metadata['extensions']['python.exports'] = exports except IOError: pass # copy console_scripts entry points to commands - if 'exports' in metadata: + if 'python.exports' in metadata['extensions']: for (ep_script, wrap_script) in (('console_scripts', 'wrap_console'), ('gui_scripts', 'wrap_gui')): - if ep_script in metadata['exports']: - metadata['commands'] = metadata.get('commands', {}) - metadata['commands'][wrap_script] = metadata['exports'][ep_script] + if ep_script in metadata['extensions']['python.exports']: + metadata['extensions']['python.commands'][wrap_script] = \ + metadata['extensions']['python.exports'][ep_script] return metadata @@ -231,9 +235,15 @@ requires = open(requires_path).read() for extra, reqs in pkg_resources.split_sections(requires): condition = '' + if extra and ':' in extra: # setuptools extra:condition syntax + extra, condition = extra.split(':', 1) if extra: pkg_info['Provides-Extra'] = extra - condition = '; extra == %s' % repr(extra) + if condition: + condition += " and " + condition += 'extra == %s' % repr(extra) + if condition: + condition = '; ' + condition for new_req in convert_requirements(reqs): pkg_info['Requires-Dist'] = new_req + condition diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/pydist-schema.json new/wheel-0.24.0/wheel/test/pydist-schema.json --- old/wheel-0.22.0/wheel/test/pydist-schema.json 1970-01-01 01:00:00.000000000 +0100 +++ new/wheel-0.24.0/wheel/test/pydist-schema.json 2014-07-06 18:40:16.000000000 +0200 @@ -0,0 +1,362 @@ +{ + "id": "http://www.python.org/dev/peps/pep-0426/", + "$schema": "http://json-schema.org/draft-04/schema#", + "title": "Metadata for Python Software Packages 2.0", + "type": "object", + "properties": { + "metadata_version": { + "description": "Version of the file format", + "type": "string", + "pattern": "^(\\d+(\\.\\d+)*)$" + }, + "generator": { + "description": "Name and version of the program that produced this file.", + "type": "string", + "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])( \\(.*\\))?$" + }, + "name": { + "description": "The name of the distribution.", + "type": "string", + "$ref": "#/definitions/distribution_name" + }, + "version": { + "description": "The distribution's public version identifier", + "type": "string", + "pattern": "^(\\d+(\\.\\d+)*)((a|b|c|rc)(\\d+))?(\\.(post)(\\d+))?(\\.(dev)(\\d+))?$" + }, + "source_label": { + "description": "A constrained identifying text string", + "type": "string", + "pattern": "^[0-9a-z_.-+]+$" + }, + "source_url": { + "description": "A string containing a full URL where the source for this specific version of the distribution can be downloaded.", + "type": "string", + "format": "uri" + }, + "summary": { + "description": "A one-line summary of what the distribution does.", + "type": "string" + }, + "extras": { + "description": "A list of optional sets of dependencies that may be used to define conditional dependencies in \"may_require\" and similar fields.", + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/extra_name" + } + }, + "meta_requires": { + "description": "A list of subdistributions made available through this metadistribution.", + "type": "array", + "$ref": "#/definitions/dependencies" + }, + "run_requires": { + "description": "A list of other distributions needed to run this distribution.", + "type": "array", + "$ref": "#/definitions/dependencies" + }, + "test_requires": { + "description": "A list of other distributions needed when this distribution is tested.", + "type": "array", + "$ref": "#/definitions/dependencies" + }, + "build_requires": { + "description": "A list of other distributions needed when this distribution is built.", + "type": "array", + "$ref": "#/definitions/dependencies" + }, + "dev_requires": { + "description": "A list of other distributions needed when this distribution is developed.", + "type": "array", + "$ref": "#/definitions/dependencies" + }, + "provides": { + "description": "A list of strings naming additional dependency requirements that are satisfied by installing this distribution. These strings must be of the form Name or Name (Version)", + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/provides_declaration" + } + }, + "modules": { + "description": "A list of modules and/or packages available for import after installing this distribution.", + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/qualified_name" + } + }, + "namespaces": { + "description": "A list of namespace packages this distribution contributes to", + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/qualified_name" + } + }, + "obsoleted_by": { + "description": "A string that indicates that this project is no longer being developed. The named project provides a substitute or replacement.", + "type": "string", + "$ref": "#/definitions/requirement" + }, + "supports_environments": { + "description": "A list of strings specifying the environments that the distribution explicitly supports.", + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/environment_marker" + } + }, + "install_hooks": { + "description": "The install_hooks field is used to define various operations that may be invoked on a distribution in a platform independent manner.", + "type": "object", + "properties": { + "postinstall": { + "type": "string", + "$ref": "#/definitions/export_specifier" + }, + "preuninstall": { + "type": "string", + "$ref": "#/definitions/export_specifier" + } + } + }, + "extensions": { + "description": "Extensions to the metadata may be present in a mapping under the 'extensions' key.", + "type": "object", + "$ref": "#/definitions/extensions" + } + }, + + "required": ["metadata_version", "name", "version", "summary"], + "additionalProperties": false, + + "definitions": { + "contact": { + "type": "object", + "properties": { + "name": { + "type": "string" + }, + "email": { + "type": "string" + }, + "url": { + "type": "string" + }, + "role": { + "type": "string" + } + }, + "required": ["name"], + "additionalProperties": false + }, + "dependencies": { + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/dependency" + } + }, + "dependency": { + "type": "object", + "properties": { + "extra": { + "type": "string", + "$ref": "#/definitions/extra_name" + }, + "environment": { + "type": "string", + "$ref": "#/definitions/environment_marker" + }, + "requires": { + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/requirement" + } + } + }, + "required": ["requires"], + "additionalProperties": false + }, + "extensions": { + "type": "object", + "patternProperties": { + "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": {} + }, + "properties": { + "python.details" : { + "description": "More information regarding the distribution.", + "type": "object", + "properties": { + "document_names": { + "description": "Names of supporting metadata documents", + "type": "object", + "properties": { + "description": { + "type": "string", + "$ref": "#/definitions/document_name" + }, + "changelog": { + "type": "string", + "$ref": "#/definitions/document_name" + }, + "license": { + "type": "string", + "$ref": "#/definitions/document_name" + } + }, + "additionalProperties": false + }, + "keywords": { + "description": "A list of additional keywords to be used to assist searching for the distribution in a larger catalog.", + "type": "array", + "items": { + "type": "string" + } + }, + "license": { + "description": "A string indicating the license covering the distribution.", + "type": "string" + }, + "classifiers": { + "description": "A list of strings, with each giving a single classification value for the distribution.", + "type": "array", + "items": { + "type": "string" + } + } + } + }, + "python.project" : { + "description": "More information regarding the creation and maintenance of the distribution.", + "$ref": "#/definitions/project_or_integrator" + }, + "python.integrator" : { + "description": "More information regarding the downstream redistributor of the distribution.", + "$ref": "#/definitions/project_or_integrator" + }, + "python.commands" : { + "description": "Command line interfaces provided by this distribution", + "type": "object", + "$ref": "#/definitions/commands" + }, + "python.exports" : { + "description": "Other exported interfaces provided by this distribution", + "type": "object", + "$ref": "#/definitions/exports" + } + }, + "additionalProperties": false + }, + "commands": { + "type": "object", + "properties": { + "wrap_console": { + "type": "object", + "$ref": "#/definitions/command_map" + }, + "wrap_gui": { + "type": "object", + "$ref": "#/definitions/command_map" + }, + "prebuilt": { + "type": "array", + "items": { + "type": "string", + "$ref": "#/definitions/relative_path" + } + } + }, + "additionalProperties": false + }, + "exports": { + "type": "object", + "patternProperties": { + "^[A-Za-z][0-9A-Za-z_]*([.][0-9A-Za-z_]*)*$": { + "type": "object", + "patternProperties": { + ".": { + "type": "string", + "$ref": "#/definitions/export_specifier" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "command_map": { + "type": "object", + "patternProperties": { + "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$": { + "type": "string", + "$ref": "#/definitions/export_specifier" + } + }, + "additionalProperties": false + }, + "project_or_integrator" : { + "type": "object", + "properties" : { + "contacts": { + "description": "A list of contributor entries giving the recommended contact points for getting more information about the project.", + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/contact" + } + }, + "contributors": { + "description": "A list of contributor entries for other contributors not already listed as current project points of contact.", + "type": "array", + "items": { + "type": "object", + "$ref": "#/definitions/contact" + } + }, + "project_urls": { + "description": "A mapping of arbitrary text labels to additional URLs relevant to the project.", + "type": "object" + } + } + }, + "distribution_name": { + "type": "string", + "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$" + }, + "requirement": { + "type": "string" + }, + "provides_declaration": { + "type": "string" + }, + "environment_marker": { + "type": "string" + }, + "document_name": { + "type": "string" + }, + "extra_name" : { + "type": "string", + "pattern": "^[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?$" + }, + "relative_path" : { + "type": "string" + }, + "export_specifier": { + "type": "string", + "pattern": "^([A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*)(:[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*)?(\\[[0-9A-Za-z]([0-9A-Za-z_.-]*[0-9A-Za-z])?\\])?$" + }, + "qualified_name" : { + "type": "string", + "pattern": "^[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_][A-Za-z_0-9]*)*$" + }, + "prefixed_name" : { + "type": "string", + "pattern": "^[A-Za-z_][A-Za-z_0-9]*([.][A-Za-z_0-9]*)*$" + } + } +} Files old/wheel-0.22.0/wheel/test/test-1.0-py2.py3-none-win32.whl and new/wheel-0.24.0/wheel/test/test-1.0-py2.py3-none-win32.whl differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_basic.py new/wheel-0.24.0/wheel/test/test_basic.py --- old/wheel-0.22.0/wheel/test/test_basic.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/test/test_basic.py 2014-07-06 18:40:16.000000000 +0200 @@ -94,11 +94,22 @@ This also verifies the integrity of our testing wheel files. """ for dist in test_distributions: - distdir = pkg_resources.resource_filename('wheel.test', + distdir = pkg_resources.resource_filename('wheel.test', os.path.join(dist, 'dist')) for wheelfile in (w for w in os.listdir(distdir) if w.endswith('.whl')): wheel.tool.unpack(os.path.join(distdir, wheelfile), distdir) +def test_no_scripts(): + """Make sure entry point scripts are not generated.""" + dist = "complex-dist" + basedir = pkg_resources.resource_filename('wheel.test', dist) + for (dirname, subdirs, filenames) in os.walk(basedir): + for filename in filenames: + if filename.endswith('.whl'): + whl = ZipFile(os.path.join(dirname, filename)) + for entry in whl.infolist(): + assert not '.data/scripts/' in entry.filename + def test_pydist(): """Make sure pydist.json exists and validates against our schema.""" # XXX this test may need manual cleanup of older wheels @@ -118,11 +129,11 @@ if filename.endswith('.whl'): whl = ZipFile(os.path.join(dirname, filename)) for entry in whl.infolist(): - if entry.filename.endswith('/pydist.json'): + if entry.filename.endswith('/metadata.json'): pymeta = json.loads(whl.read(entry).decode('utf-8')) jsonschema.validate(pymeta, pymeta_schema) valid += 1 - assert valid > 0, "No pydist.json found" + assert valid > 0, "No metadata.json found" def test_util(): """Test functions in util.py.""" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_tagopt.py new/wheel-0.24.0/wheel/test/test_tagopt.py --- old/wheel-0.22.0/wheel/test/test_tagopt.py 1970-01-01 01:00:00.000000000 +0100 +++ new/wheel-0.24.0/wheel/test/test_tagopt.py 2014-07-06 18:40:16.000000000 +0200 @@ -0,0 +1,112 @@ +""" +Tests for the bdist_wheel tag options (--python-tag and --universal) +""" + +import sys +import shutil +import pytest +import py.path +import tempfile +import subprocess + +SETUP_PY = """\ +from setuptools import setup + +setup( + name="Test", + version="1.0", + author_email="[email protected]", + py_modules=["test"], +) +""" + [email protected] +def temp_pkg(request): + tempdir = tempfile.mkdtemp() + def fin(): + shutil.rmtree(tempdir) + request.addfinalizer(fin) + temppath = py.path.local(tempdir) + temppath.join('test.py').write('print("Hello, world")') + temppath.join('setup.py').write(SETUP_PY) + return temppath + +def test_default_tag(temp_pkg): + subprocess.check_call([sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py%s-' % (sys.version[0],)) + assert wheels[0].ext == '.whl' + +def test_explicit_tag(temp_pkg): + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel', '--python-tag=py32'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py32-') + assert wheels[0].ext == '.whl' + +def test_universal_tag(temp_pkg): + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel', '--universal'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + +def test_universal_beats_explicit_tag(temp_pkg): + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel', '--universal', '--python-tag=py32'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + +def test_universal_in_setup_cfg(temp_pkg): + temp_pkg.join('setup.cfg').write('[bdist_wheel]\nuniversal=1') + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + +def test_pythontag_in_setup_cfg(temp_pkg): + temp_pkg.join('setup.cfg').write('[bdist_wheel]\npython_tag=py32') + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py32-') + assert wheels[0].ext == '.whl' + +def test_legacy_wheel_section_in_setup_cfg(temp_pkg): + temp_pkg.join('setup.cfg').write('[wheel]\nuniversal=1') + subprocess.check_call( + [sys.executable, 'setup.py', 'bdist_wheel'], + cwd=str(temp_pkg)) + dist_dir = temp_pkg.join('dist') + assert dist_dir.check(dir=1) + wheels = dist_dir.listdir() + assert len(wheels) == 1 + assert wheels[0].basename.startswith('Test-1.0-py2.py3-') + assert wheels[0].ext == '.whl' + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/test/test_tool.py new/wheel-0.24.0/wheel/test/test_tool.py --- old/wheel-0.22.0/wheel/test/test_tool.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/test/test_tool.py 2014-07-06 18:40:16.000000000 +0200 @@ -10,6 +10,8 @@ class keyringTest: backend = keyring.backend + class backends: + file = keyring.backends.file @classmethod def get_keyring(cls): class keyringTest2: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/tool/__init__.py new/wheel-0.24.0/wheel/tool/__init__.py --- old/wheel-0.22.0/wheel/tool/__init__.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/tool/__init__.py 2014-07-06 18:47:02.000000000 +0200 @@ -30,7 +30,7 @@ from ..signatures import keys import keyring except ImportError: - raise WheelError("Install wheel[signatures] (requires keyring, dirspec) for signatures.") + raise WheelError("Install wheel[signatures] (requires keyring, pyxdg) for signatures.") return keys.WheelKeys, keyring def keygen(get_keyring=get_keyring): @@ -47,7 +47,7 @@ kr = keyring.get_keyring() kr.set_password("wheel", vk, sk) sys.stdout.write("Created Ed25519 keypair with vk={0}\n".format(vk)) - if isinstance(kr, keyring.backend.BasicFileKeyring): + if isinstance(kr, keyring.backends.file.BaseKeyring): sys.stdout.write("in {0}\n".format(kr.file_path)) else: sys.stdout.write("in %r\n" % kr.__class__) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel/util.py new/wheel-0.24.0/wheel/util.py --- old/wheel-0.22.0/wheel/util.py 2013-09-16 00:08:51.000000000 +0200 +++ new/wheel-0.24.0/wheel/util.py 2014-07-06 18:40:16.000000000 +0200 @@ -6,7 +6,7 @@ import json import hashlib -__all__ = ['urlsafe_b64encode', 'urlsafe_b64decode', 'utf8', +__all__ = ['urlsafe_b64encode', 'urlsafe_b64decode', 'utf8', 'to_json', 'from_json', 'matches_requirement'] def urlsafe_b64encode(data): @@ -118,11 +118,11 @@ yield path else: def save_config_path(*resource): - import dirspec.basedir - return dirspec.basedir.save_config_path(*resource) + import xdg.BaseDirectory + return xdg.BaseDirectory.save_config_path(*resource) def load_config_paths(*resource): - import dirspec.basedir - return dirspec.basedir.load_config_paths(*resource) + import xdg.BaseDirectory + return xdg.BaseDirectory.load_config_paths(*resource) def matches_requirement(req, wheels): """List of wheels matching a requirement. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/PKG-INFO new/wheel-0.24.0/wheel.egg-info/PKG-INFO --- old/wheel-0.22.0/wheel.egg-info/PKG-INFO 2013-09-16 00:09:16.000000000 +0200 +++ new/wheel-0.24.0/wheel.egg-info/PKG-INFO 2014-07-06 18:56:21.000000000 +0200 @@ -1,8 +1,8 @@ Metadata-Version: 1.1 Name: wheel -Version: 0.22.0 +Version: 0.24.0 Summary: A built-package format for Python. -Home-page: http://bitbucket.org/dholth/wheel/ +Home-page: http://bitbucket.org/pypa/wheel/ Author: Daniel Holth Author-email: [email protected] License: MIT @@ -27,7 +27,7 @@ The wheel documentation is at http://wheel.rtfd.org/. The file format is documented in PEP 427 (http://www.python.org/dev/peps/pep-0427/). - The reference implementation is at http://bitbucket.org/dholth/wheel/ + The reference implementation is at https://bitbucket.org/pypa/wheel Why not egg? ------------ @@ -49,6 +49,34 @@ + 0.24.0 + ====== + - The python tag used for pure-python packages is now .pyN (major version + only). This change actually occurred in 0.23.0 when the --python-tag + option was added, but was not explicitly mentioned in the changelog then. + - wininst2wheel and egg2wheel removed. Use "wheel convert [archive]" + instead. + - Wheel now supports setuptools style conditional requirements via the + extras_require={} syntax. Separate 'extra' names from conditions using + the : character. Wheel's own setup.py does this. (The empty-string + extra is the same as install_requires.) These conditional requirements + should work the same whether the package is installed by wheel or + by setup.py. + + 0.23.0 + ====== + - Compatibiltiy tag flags added to the bdist_wheel command + - sdist should include files necessary for tests + - 'wheel convert' can now also convert unpacked eggs to wheel + - Rename pydist.json to metadata.json to avoid stepping on the PEP + - The --skip-scripts option has been removed, and not generating scripts is now + the default. The option was a temporary approach until installers could + generate scripts themselves. That is now the case with pip 1.5 and later. + Note that using pip 1.4 to install a wheel without scripts will leave the + installation without entry-point wrappers. The "wheel install-scripts" + command can be used to generate the scripts in such cases. + - Thank you contributors + 0.22.0 ====== - Include entry_points.txt, scripts a.k.a. commands, in experimental @@ -61,7 +89,7 @@ - Pregenerated scripts are the default again. - "setup.py bdist_wheel --skip-scripts" turns them off. - setuptools is no longer a listed requirement for the 'wheel' - package. It is of course still required in order for bdist_wheel + package. It is of course still required in order for bdist_wheel to work. - "python -m wheel" avoids importing pkg_resources until it's necessary. @@ -168,8 +196,8 @@ 0.9.5 ===== - - Wheel's own wheel file can be executed by Python, and can install itself: - ``python wheel-0.9.5-py27-none-any/wheel install ...`` + - Wheel's own wheel file can be executed by Python, and can install itself: + ``python wheel-0.9.5-py27-none-any/wheel install ...`` - Use argparse; basic ``wheel install`` command should run with only stdlib dependencies. - Allow requires_dist in setup.cfg's [metadata] section. In addition to @@ -263,3 +291,4 @@ Classifier: Programming Language :: Python :: 3 Classifier: Programming Language :: Python :: 3.2 Classifier: Programming Language :: Python :: 3.3 +Classifier: Programming Language :: Python :: 3.4 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/SOURCES.txt new/wheel-0.24.0/wheel.egg-info/SOURCES.txt --- old/wheel-0.22.0/wheel.egg-info/SOURCES.txt 2013-09-16 00:09:16.000000000 +0200 +++ new/wheel-0.24.0/wheel.egg-info/SOURCES.txt 2014-07-06 18:56:22.000000000 +0200 @@ -31,16 +31,20 @@ wheel/signatures/ed25519py.py wheel/signatures/keys.py wheel/test/__init__.py +wheel/test/pydist-schema.json +wheel/test/test-1.0-py2.py3-none-win32.whl wheel/test/test_basic.py wheel/test/test_install.py wheel/test/test_keys.py wheel/test/test_paths.py wheel/test/test_ranking.py wheel/test/test_signatures.py +wheel/test/test_tagopt.py wheel/test/test_tool.py wheel/test/test_wheelfile.py wheel/test/complex-dist/setup.py wheel/test/complex-dist/complexdist/__init__.py +wheel/test/headers.dist/header.h wheel/test/headers.dist/headersdist.py wheel/test/headers.dist/setup.py wheel/test/simple.dist/setup.py diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/entry_points.txt new/wheel-0.24.0/wheel.egg-info/entry_points.txt --- old/wheel-0.22.0/wheel.egg-info/entry_points.txt 2013-09-16 00:09:16.000000000 +0200 +++ new/wheel-0.24.0/wheel.egg-info/entry_points.txt 2014-07-06 18:56:21.000000000 +0200 @@ -1,6 +1,4 @@ [console_scripts] -wininst2wheel = wheel.wininst2wheel:main -egg2wheel = wheel.egg2wheel:main wheel = wheel.tool:main [distutils.commands] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/wheel-0.22.0/wheel.egg-info/requires.txt new/wheel-0.24.0/wheel.egg-info/requires.txt --- old/wheel-0.22.0/wheel.egg-info/requires.txt 2013-09-16 00:09:16.000000000 +0200 +++ new/wheel-0.24.0/wheel.egg-info/requires.txt 2014-07-06 18:56:21.000000000 +0200 @@ -5,7 +5,12 @@ [signatures] keyring -dirspec [faster-signatures] -ed25519ll \ No newline at end of file +ed25519ll + +[:python_version=="2.6"] +argparse + +[signatures:sys_platform!="win32"] +pyxdg \ No newline at end of file
