From ef8bd66e04d5c7013b316025e8c88d727eb2c609 2012-07-21 15:05:29 From: MinRK Date: 2012-07-21 15:05:29 Subject: [PATCH] Backport PR #2067: update tools/release_windows.py The first commit is the actual version of the file I used to build and upload the 0.13 installers to GitHub. The second commit fixes PyPI upload. --- diff --git a/setup.py b/setup.py index 4e656ae..4ce1a11 100755 --- a/setup.py +++ b/setup.py @@ -52,6 +52,7 @@ from glob import glob if os.path.exists('MANIFEST'): os.remove('MANIFEST') from distutils.core import setup +from distutils.command.upload import upload # On Python 3, we need distribute (new setuptools) to do the 2to3 conversion if PY3: @@ -171,6 +172,31 @@ setup_args['package_data'] = package_data setup_args['data_files'] = data_files #--------------------------------------------------------------------------- +# custom upload_wininst command +#--------------------------------------------------------------------------- + +class UploadWindowsInstallers(upload): + + description = "Upload Windows installers to PyPI (only used from tools/release_windows.py)" + user_options = upload.user_options + [ + ('files=', 'f', 'exe file (or glob) to upload') + ] + def initialize_options(self): + upload.initialize_options(self) + meta = self.distribution.metadata + base = '{name}-{version}'.format( + name=meta.get_name(), + version=meta.get_version() + ) + self.files = os.path.join('dist', '%s.*.exe' % base) + + def run(self): + for dist_file in glob(self.files): + self.upload_file('bdist_wininst', 'any', dist_file) + +setup_args['cmdclass']['upload_wininst'] = UploadWindowsInstallers + +#--------------------------------------------------------------------------- # Handle scripts, dependencies, and setuptools specific things #--------------------------------------------------------------------------- diff --git a/tools/release_windows.py b/tools/release_windows.py index 13460e2..2a50e22 100644 --- a/tools/release_windows.py +++ b/tools/release_windows.py @@ -23,10 +23,10 @@ except ImportError: github = '--github' in sys.argv -cmd_t = "{py} setup.py bdist_wininst --plat-name=py{v}-{plat}" +cmd_t = "{py} setup.py bdist_wininst --plat-name={plat}" -if '--pypi' in sys.argv: - cmd_t += ' --upload' +pypi = '--pypi' in sys.argv +pypi_cmd_t = "python setup.py upload_wininst -f {fname}" for py in ['python', 'python3']: # deliberately mangle the name, @@ -36,11 +36,17 @@ for py in ['python', 'python3']: shutil.rmtree('build') except OSError: pass - for plat in ['32b-Windows', '64b-Windows']: + for plat in ['win32', 'win-amd64']: cmd = cmd_t.format(**locals()) sh(cmd) + orig = glob.glob(os.path.join('dist', 'ipython-*.{plat}.exe'.format(**locals())))[0] + mangled = orig.replace('.{plat}.exe'.format(**locals()), + '.py{v}-{plat}.exe'.format(**locals()) + ) + os.rename(orig, mangled) + if pypi: + sh(pypi_cmd_t.format(fname=mangled)) if github and gh_api: - exe = glob.glob(os.path.join("dist", "ipython-*{v}-{plat}.exe".format(**locals())))[0] - print ("Uploading %s to GitHub" % exe) + print ("Uploading %s to GitHub" % mangled) desc = "IPython Installer for Python {v}.x on {plat}".format(**locals()) - gh_api.post_download('ipython/ipython', exe, description=desc) + gh_api.post_download('ipython/ipython', mangled, description=desc)