{ "metadata": { "name": "build_and_publish_pypi" }, "nbformat": 3, "nbformat_minor": 0, "worksheets": [ { "cells": [ { "cell_type": "markdown", "metadata": {}, "source": "# Build a debian package from a PyPI file\n\nThis is a quick-and-dirty interface to build Debian source files (.dsc) directly from PyPI. These should work on Debian, Ubuntu, and so on.\n\n## What to do\n\nEdit the values below to create something useful for yourself." }, { "cell_type": "code", "collapsed": false, "input": "PyPI_name = 'argh'\nmaintainer = 'Andrew Straw '\nworkdir = '/stdeb-work'\nsuite = 'precise'", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": "# With correct values above, the rest of this should Just Work." }, { "cell_type": "code", "collapsed": false, "input": "!mkdir -p {workdir} && cd {workdir} && pypi-download {PyPI_name}", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": "files = !cd {workdir} && ls\nfiles = [f for f in files if f != 'deb_dist'] # ignore previous builds\nassert len(files)==1\nsource_fname = files[0]", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": "!cd {workdir} && py2dsc --maintainer \"{maintainer}\" --suite {suite} {source_fname}", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": "import debian.deb822\n\nimport glob, os\n\ndsc_dir = os.path.join(workdir,'deb_dist')\n\ndsc_fnames = glob.glob(os.path.join(dsc_dir,'*.dsc'))\nassert len(dsc_fnames)==1\ndsc_full_fname=dsc_fnames[0]\ndsc_fname = os.path.basename(dsc_full_fname)\n\nfd = open(dsc_full_fname,mode='r')\ndsc = debian.deb822.Dsc( sequence=fd )\n\ndsc.get('Files')", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": "upload_files = [ f['name'] for f in dsc.get('Files')]\nupload_files.append( dsc_fname )\n\ntarball_name = os.path.splitext(dsc_fname)[0] + '.tar'\nfiles_str = ' '.join(upload_files)", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "code", "collapsed": false, "input": "!tar cvf {tarball_name} -C {dsc_dir} {files_str}", "language": "python", "metadata": {}, "outputs": [] }, { "cell_type": "markdown", "metadata": {}, "source": "# Now download this file" }, { "cell_type": "code", "collapsed": false, "input": "from IPython.display import FileLink\nFileLink(tarball_name)", "language": "python", "metadata": {}, "outputs": [] } ], "metadata": {} } ] }