<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Fetchez le Python</title>
	<atom:link href="http://tarekziade.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://tarekziade.wordpress.com</link>
	<description>Technical blog on the Python programming language, in a pure Frenglish style</description>
	<lastBuildDate>Wed, 03 Mar 2010 23:27:10 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<cloud domain='tarekziade.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://www.gravatar.com/blavatar/107485281a5c5ceea5df5c78be3fd0d5?s=96&#038;d=http://s2.wp.com/i/buttonw-com.png</url>
		<title>Fetchez le Python</title>
		<link>http://tarekziade.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://tarekziade.wordpress.com/osd.xml" title="Fetchez le Python" />
	<atom:link rel='hub' href='http://tarekziade.wordpress.com/?pushpress=hub'/>
		<item>
		<title>The fate of Distutils &#8211; Pycon Summit + Packaging Sprint detailed report</title>
		<link>http://tarekziade.wordpress.com/2010/03/03/the-fate-of-distutils-pycon-summit-packaging-sprint-detailed-report/</link>
		<comments>http://tarekziade.wordpress.com/2010/03/03/the-fate-of-distutils-pycon-summit-packaging-sprint-detailed-report/#comments</comments>
		<pubDate>Wed, 03 Mar 2010 23:27:10 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1113</guid>
		<description><![CDATA[The summit
I quickly posted an entry right after the Language Summit we held before Pycon in Atlanta. Basically, all the work I have being doing in Distutils and the PEPs we&#8217;ve prepared for the &#8220;big refactoring&#8221; will not be done in the standard library. Distutils in the stdlib trunk will be reverted to its current [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1113&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<h3>The summit</h3>
<p>I quickly <a href="http://tarekziade.wordpress.com/2010/02/18/python-language-summit-summary-of-the-packaging-track/" target="_blank">posted an entry</a> right after the <a href="http://www.google.com/url?sa=t&amp;source=web&amp;ct=res&amp;cd=1&amp;ved=0CAYQFjAA&amp;url=http%3A%2F%2Fus.pycon.org%2F2009%2Fabout%2Fsummits%2Flanguage%2F&amp;ei=TNWOS9WfNMHM4gbx0vitDQ&amp;usg=AFQjCNG3uKSR65UU2riqyQDEAgFng5b2eg" target="_blank">Language Summit</a> we held before Pycon in Atlanta. Basically, all the work I have being doing in Distutils and the PEPs we&#8217;ve prepared for the &#8220;big refactoring&#8221; will not be done in the standard library. Distutils in the stdlib trunk will be reverted to its current 2.6.x state.</p>
<p>I was quite despaired right after the summit. All the work we did during in the past year would not land into the standard library for 2.7, and all the pre- refactoring work I did, like making the test coverage decent, was going to be useless for the stdlib. Having that work included in 2.7 was one of my goal and I worked hard on making sure most of the important PEPs would be accepted before the feature freeze for 2.7 happened (the first beta, freezing new features, is in 4 weeks.)</p>
<p>I was even more depressed because I started to pull out of Distutils the &#8220;sysconfig&#8221; module and simplified the code in distutils, while making sure that the backward compatibility was kept.</p>
<p>I had a twenty minutes meeting with Guido after the Summit to clarify the situation and he helped me understand why this was the right path and worked with me on what to do next in the stdlib front and outside the stdlib.</p>
<p>Basically, <strong>a package that comes in the standard library has a foot in the grave</strong> (I am paraphrasing Guido here.). Its APIs is frozen, and people don&#8217;t really expect nothing from it, but small new features and bug fixes. Refactorings are dangerous, if not impossible.</p>
<p>I have hit that problem in the past, in one of the 2.6 bug fix release, where I broke Setuptools compatibility because of an internal change I have made in a private method. The breakage was partly because Setuptools overrides a private method and partly because a public method that was not clearly documented was affected.</p>
<p>A few weeks ago the problem happened again : someone complained on python-dev because a declaration (an exception class) was missing from Distutils. An exception class was imported from the <em>errors</em> module into another Distutils module, but not used anymore there. And the module it was imported in didn&#8217;t have an <em>__all__</em> attribute. A third-party tool was importing the exception from the wrong module, so when I cleaned it up the third party module was broken.</p>
<p>So basically, any change I make in Distutils, even a simple cleaning, and worse, even a private method change, potentially breaks third-party tools.</p>
<p>You could argue that they should be careful in how they use Distutils, and never patch it or change its internal etc., and for edge cases like missing imports, just fix them.</p>
<p>But hey, Python 2.7 is out of the door in five weeks, and the user experience will be that <em>Python has broken third-party libraries</em>.</p>
<p>And the worse part of it : some of these libraries like Setuptools are not really maintained anymore and expect Distutils not to evolve anymore. But Setuptools is used nevertheless since it solves some problems Distutils doesn&#8217;t. So the end user is the one that will suffer from those regressions.</p>
<p>In other words, project like Setuptools slows down the work we want to do in packaging because the current eco-system depends on a big, monolithic, messy pile of code that is located in different projects with different maintainers.</p>
<p>At this point, I understood that the easiest way for  Distutils to evolve was to get away from this pile and grow on another namespace called <strong>distutils2</strong>.</p>
<h3>Welcome Distutils2</h3>
<p>If you have followed what is going on with packaging since last year, you might think: &#8220;distutils, setuptools, distribute and now distutils2 ?, oh no!!!&#8221;</p>
<p>But that is going to be for the benefit of everyone. See the roadmap in image below.</p>
<p style="text-align:center;">
<div class="wp-caption alignnone" style="width: 395px"><a href="http://guide.python-distribute.org/introduction.html#current-state-of-packaging"><img title="State of packaging" src="http://guide.python-distribute.org/_images/state_of_packaging.jpg" alt="State of packaging" width="385" height="220" /></a><p class="wp-caption-text">State of packaging</p></div>
<p>So basically, I have forked Distutils and renamed its package into <strong>Distutils2</strong>. The project is located in <a href="http://hg.python.org/distutils2" target="_blank">http://hg.python.org/distutils2</a> and the goal is to put it back into the standard library as soon as it reaches a state where it starts to be used by the community. Distutils will just die slowly, probably pulling Setuptools and Distribute with it.</p>
<p>The Distribute project is still important because it can help us releasing bug fixes or Python 3 support things <em><strong>today</strong></em>.</p>
<p>Distutils2 will be 2.4 to 3.2 compatible and will get back from Distribute the good bits and implement the PEPs that were accepted lately <a href="http://tarekziade.wordpress.com/2010/02/10/pep-345-and-386-accepted-summary-of-changes/">PEP 345 and PEP 386</a>.</p>
<p>And I am happily removing old code we don&#8217;t want/need anymore without worrying about backward compatibility. Yeah !</p>
<h3>The packaging sprint</h3>
<p>After the conferences, we started a packaging sprint and I was surprised because many people showed up and worked on the topic.</p>
<div class="wp-caption alignnone" style="width: 494px"><a href="http://lh3.ggpht.com/_BBU4XN71nJo/S45d_jRywdI/AAAAAAAAAl4/ggtwGaVkKwU/s720/IMGP7237.jpg"><img class=" " title="Brainstorming on PEP 376" src="http://lh3.ggpht.com/_BBU4XN71nJo/S45d_jRywdI/AAAAAAAAAl4/ggtwGaVkKwU/s720/IMGP7237.jpg" alt="Brainstorming on PEP 376" width="484" height="323" /></a><p class="wp-caption-text">Brainstorming on PEP 376</p></div>
<p>We created a few teams to work on PEP 376, mkpkg, the Hitchicker&#8217;s Guide to Packaging (HHGP), and Distribute. I won&#8217;t say the name of each person, I am too scared to forget someone <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> .</p>
<h3>PEP 376</h3>
<p>Like last year, people from various distributions (Fedora, Ubuntu, Debian) and I worked on packaging issues. They worked on PEP 386 last year mainly (the versioning scheme) and focused on <a href="http://www.python.org/dev/peps/pep-0376">PEP 376</a> this year. This PEP is about setting up a standard for installed packages, and an installation index that allows to query what packages are installed, and get their metadata. In extend, it provides an uninstall feature. The goal is to have a standard for all package managers of course.</p>
<p>One part of the PEP is about describing the data files that are installed with the project (like configuration files or documentation) so they can be removed and maybe relocated. The group focused on describing the files a project contains in a static way (in setup.cfg) with variables that can be expanded an installation time (which values are provided by Python, but globally configurable by the OS packagers.)</p>
<p>We did quite some work and brainstorming on this, and even focused on removing setup.py ! A fully static description of a project (metadata+file list) is the key to a better packaging tool !</p>
<p>Expect a proposal soon on distutils-SIG, for PEP 376. If you want to have a look, the draft proposal is here: <a href="http://hg.python.org/distutils2/file/243df45d7f6f/docs/design/wiki.rst">draft</a>.</p>
<h3>mkpkg and Distribute</h3>
<p>We had two one-member teams at some point, so I can name them without being scared of forgetting someone <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Sean worked on a nice add-on for Distutils2, a script that builds a setup.py file after asking you a few questions. <a href="http://www.tummy.com/journals/entries/jafo_20100302_003614" target="_blank">He blogged about it</a>. so I don&#8217;t need to get into further details <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Noufal worked on fixing some bugs in <a href="http://bitbucket.org/tarek/distribute" target="_blank">Distribute</a>. We should do a release at some point.</p>
<h3>The HitchHicker&#8217;s Guide to Packaging</h3>
<p>Another group worked on the guide. The goal is to provide some help for people that want to package things <strong>today</strong> and are despaired with the sparse documentation they can find. Which tool to use ? how ? when ?</p>
<p>The work done was quite amazing, look at it : <a href="http://guide.python-distribute.org" target="_blank">http://guide.python-distribute.org</a></p>
<p>I have spoken with Georg Brandl to see how we could move it to docs.python.org and make it grow there.</p>
<h3>Distutils2 coding</h3>
<p>Besides PEP 345, I worked on making Distutils2 work for 2.2, 2.5, 2.6 and this is now over. I have also almost fully implemented PEP 345 in there.</p>
<p>There&#8217;s now a metadata module with a dict-like <a href="http://hg.python.org/distutils2/file/243df45d7f6f/src/distutils2/metadata.py" target="_blank">DistributionMetadata</a> class that knows how to read and write PKG-INFO files. It also knows how to interpret the micro-language we&#8217;ve defined: the <a href="http://www.python.org/dev/peps/pep-0345/#environment-markers" target="_blank">environment markers</a>.</p>
<p>Last, I&#8217;ve added the <a href="http://www.python.org/dev/peps/pep-0386" target="_blank">PEP 386</a> version module : <a href="http://hg.python.org/distutils2/file/243df45d7f6f/src/distutils2/version.py" target="_blank">version.py</a>. This one is used now by the metadata class to control versions.</p>
<p>More to come !</p>
<h3>Next sprint at Confoo.ca</h3>
<p>The <a href="http://www.montrealpython.org/2010/02/upcoming-sprints/" target="_blank">next packaging sprint</a> will happen in Montreal, where I am going as a speaker next week. We will continue the worked started, so stay tuned.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1113/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1113/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1113/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1113&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/03/03/the-fate-of-distutils-pycon-summit-packaging-sprint-detailed-report/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>

		<media:content url="http://guide.python-distribute.org/_images/state_of_packaging.jpg" medium="image">
			<media:title type="html">State of packaging</media:title>
		</media:content>

		<media:content url="http://lh3.ggpht.com/_BBU4XN71nJo/S45d_jRywdI/AAAAAAAAAl4/ggtwGaVkKwU/s720/IMGP7237.jpg" medium="image">
			<media:title type="html">Brainstorming on PEP 376</media:title>
		</media:content>
	</item>
		<item>
		<title>Pycon slides + answers to GM questions</title>
		<link>http://tarekziade.wordpress.com/2010/02/20/pycon-slides-answers-to-gm-questions/</link>
		<comments>http://tarekziade.wordpress.com/2010/02/20/pycon-slides-answers-to-gm-questions/#comments</comments>
		<pubDate>Sat, 20 Feb 2010 14:18:27 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1107</guid>
		<description><![CDATA[I did my presentation yesterday, and it seems like people enjoyed it, from what I&#8217;ve heard in the halls and seen online. I am very glad about this feedback because packaging is not the sexiest topic in programming conferences in general.
Anyways, here are my slides : http://ziade.org/slides/pycon-2010-state-of-packaging.pdf
And as promised, I&#8217;ve answered to all the questions [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1107&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I did my presentation yesterday, and it seems like people enjoyed it, from what I&#8217;ve heard in the halls and seen online. I am very glad about this feedback because packaging is not the sexiest topic in programming conferences in general.</p>
<p>Anyways, here are my slides : <a href="http://ziade.org/slides/pycon-2010-state-of-packaging.pdf" target="_self">http://ziade.org/slides/pycon-2010-state-of-packaging.pdf</a></p>
<p>And as promised, I&#8217;ve answered to all the questions people asked in the google moderator :<a href="http://www.google.com/moderator/#16/e=4395" target="_blank"> http://www.google.com/moderator/#16/e=4395 . </a>Thanks to everyone that has participated.</p>
<p>I am now going to enjoy the rest of the Pycon event and I am looking forward to the sprints.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1107/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1107/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1107/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1107&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/02/20/pycon-slides-answers-to-gm-questions/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>Python Language Summit &#8212; Summary of the packaging track</title>
		<link>http://tarekziade.wordpress.com/2010/02/18/python-language-summit-summary-of-the-packaging-track/</link>
		<comments>http://tarekziade.wordpress.com/2010/02/18/python-language-summit-summary-of-the-packaging-track/#comments</comments>
		<pubDate>Thu, 18 Feb 2010 19:03:01 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1100</guid>
		<description><![CDATA[Here are quick wrapup on what has been said during the packaging session in the language summit that is happening today at Pycon.
The four major points are:

The implementation of the accepted PEPs that have been done lately will not happen in Distutils but in a new package in the Distribute project (so logically in a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1100&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Here are quick wrapup on what has been said during the packaging session in the language summit that is happening today at Pycon.</p>
<p>The four major points are:</p>
<ol>
<li>The implementation of the accepted PEPs that have been done lately will not happen in Distutils but in a new package in the Distribute project (so logically in a &#8220;distribute&#8221; package). This resolves backward compatibility issues: new features will be under the &#8220;distribute&#8221; namespace.</li>
<li>Distribute will stay a third-party package and will be integrated in the standard library once it has enough support and feedback from the community. So this could happen in 3.3 (or 2.8 <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  ). Some part that are useful for the existing distutils package might be added in the stdlib today. But the idea is to stop adding features in distutils and focus on distribute.</li>
<li>The Hitchhicker&#8217;s guide to packaging is going to be moved into the Python repository, so it becomes part of docs.python.org. It&#8217;s not finished yet but it&#8217;ll grow there.</li>
<li>Ian threw the idea to have virtualenv as a core feature, but he&#8217;s not sure how yet. Some brainstroming on this should happen during Pycon.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1100/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1100/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1100/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1100&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/02/18/python-language-summit-summary-of-the-packaging-track/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>Ask questions about packaging</title>
		<link>http://tarekziade.wordpress.com/2010/02/11/ask-questions-about-packaging/</link>
		<comments>http://tarekziade.wordpress.com/2010/02/11/ask-questions-about-packaging/#comments</comments>
		<pubDate>Thu, 11 Feb 2010 22:20:58 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[conference]]></category>
		<category><![CDATA[distutils]]></category>
		<category><![CDATA[pycon]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1097</guid>
		<description><![CDATA[I have started a Google Moderator series to gather questions people would like to ask about Python packaging. I will answer to the most popular questions at the end of my talk at Pycon.
Here&#8217;s the link : http://www.google.com/moderator/#16/e=4395
Please, add some questions, and vote !
       <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1097&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I have started a Google Moderator series to gather questions people would like to ask about Python packaging. I will answer to the most popular questions at the end of my talk at Pycon.</p>
<p>Here&#8217;s the link : <a href="http://www.google.com/moderator/#16/e=4395" target="_blank">http://www.google.com/moderator/#16/e=4395</a></p>
<p>Please, add some questions, and vote !</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1097/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1097/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1097/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1097/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1097/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1097/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1097/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1097/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1097/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1097/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1097&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/02/11/ask-questions-about-packaging/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>PEP 345 and 386 accepted &#8212; Summary of changes</title>
		<link>http://tarekziade.wordpress.com/2010/02/10/pep-345-and-386-accepted-summary-of-changes/</link>
		<comments>http://tarekziade.wordpress.com/2010/02/10/pep-345-and-386-accepted-summary-of-changes/#comments</comments>
		<pubDate>Wed, 10 Feb 2010 10:24:01 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1078</guid>
		<description><![CDATA[Several PEPs were accepted this month by Guido, and among them PEP 345 and PEP 386, which are about Python packaging. I am summarizing in this entry the main changes we&#8217;ve made.
PEP 345 &#8211; Metadata v1.2
This PEP is about the Metadata that gets added in your project when you build a distribution using Distutils or [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1078&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Several PEPs were accepted this month by Guido, and among them PEP 345 and PEP 386, which are about Python packaging. I am summarizing in this entry the main changes we&#8217;ve made.</p>
<h2>PEP 345 &#8211; Metadata v1.2</h2>
<p>This PEP is about the Metadata that gets added in your project when you build a distribution using Distutils or a Distutils-based tool. Those are fields like &#8220;name&#8221; or &#8220;version&#8221; you pass as options in your setup.py file. They eventually land in a PKG-INFO file then at PyPI and in each Python&#8217;s site-packages where the project is installed. They are also useful when your project gets repackaged by an OS packager.</p>
<h3>New fields</h3>
<p>PEP 345 adds some new fields :</p>
<ul>
<li><strong>Maintainer</strong> : a string containing the maintainer&#8217;s name</li>
<li><strong>Maintainer-email</strong> : a string containing the maintainer&#8217;s e-mail</li>
<li><strong>Requires-Python</strong> : Python version(s) that the distribution is guaranteed to be compatible with.</li>
<li><strong>Requires-External</strong> : Describes some dependencies in the system that the distribution is to be used</li>
<li><strong>Requires-Dist</strong> : String naming some other distutils project required by this distribution.</li>
<li><strong>Provides-Dist</strong> : String naming a Distutils project which is contained within this distribution.</li>
<li><strong>Obsoletes-Dist</strong> : String describing a distutils project&#8217;s distribution which this distribution renders obsolete</li>
<li><strong>Project-URL</strong> : String containing a browsable URL for the project and a label for it, separated by a comma.</li>
</ul>
<p><strong><em>Maintainer</em></strong> and <strong><em>Maintainer-email</em></strong> were added because people were confused about the <em>maintainer</em> and <em>maintainer_email</em> options they have in Distutils. Before PEP 345, if you used the <em>author</em> <strong><em>and</em></strong> the <em>maintainer</em> fields, one was dropped and one was kept to fill the <em>Author</em> metadata field.</p>
<p><strong><em>Requires-Python</em></strong> was added so people could list the Python versions their project is compatible with. We do have classifiers already for that in the Trove classifier, but this new field is more than a simple field : the version string  that is used supports a syntax that makes it possible to describe any set of Python versions. See the <a href="http://www.python.org/dev/peps/pep-0345/#version-specifiers">version specifier</a> of the PEP.</p>
<p>Remember the <em>requires.txt</em> metadata Setuptools introduced together with the <em>install_requires</em> option ? <strong><em>Requires-Dist</em></strong> is comparable to this and will let you define dependencies on other Python projects. Distutils had the <em><strong>Requires</strong></em> field, but it was defining dependencies at the <strong>module</strong> level and this was never really used by the community. So <em><strong>Requires</strong></em> is gone in 1.2. Last, <strong><em>Requires-Dist</em></strong> is using a version comparison scheme described in details in <a href="http://www.python.org/dev/peps/pep-0345/#version-specifiers" target="_blank">the version specifier section</a>.</p>
<p><em><strong>Provides-Dist</strong></em> gives you the ability among other things to reorganize your project names or to distribute a subproject in several projects. For instance, the project called <em>ZODB</em> used to include the project <em>transaction</em> that is also distributed as a standalone project now. If <em>ZODB</em> is installed, and if you need <em>transaction</em>, you won&#8217;t have to install it again.</p>
<p><strong><em>Obsoletes-Dist</em></strong> will let you make sure a project that is incompatible with your project is not installed at the same time.</p>
<p><em><strong>Project-URL</strong></em> is useful to provide a list of URLs for your project like a browsable repository or a tracker. The goal will be to add a small box on PyPI project pages for these URLs, so developers can emphasize them. This will hopefully address the complaints PyPI had in these past months when the comment system was added.</p>
<p>Some small changes were made on existing fields. One important change is on the <em><strong>Description</strong></em> field (<em>long_description</em> in setup.py). Before PEP 345, once this value was written in the metadata file, its empty lines and spaces at the beginning of lines were truncated. In other words, if a tool was reading back this value, its reSTrucured syntax was broken. This is no longer the case.</p>
<p>Once I&#8217;ve finished implementing PEP 345, you will be able to read back a project&#8217;s metadata usig the <em>DistributionMetadata</em> class. See an <a href="http://docs.python.org/dev/distutils/examples.html#reading-the-metadata" target="_blank">example</a>.</p>
<h3>Environment Markers</h3>
<p>When Pip wants to install all the dependencies a project requires, it has to follow these steps:</p>
<ol>
<li>download the project from PyPI</li>
<li>execute a Distutils command on setup.py, like egg_info, to get the metadata. And in particular the list of requirements</li>
</ol>
<p>This is mandatory because the metadata are not statically defined and the developer might need to run some code in his setup.py to know what dependencies are required, depending on the target platform.</p>
<p>For example:</p>
<pre>    if sys.platform == 'win32':
        install_requires = ['pywin32']
    else:
        install_requires = []</pre>
<p>In other words, there&#8217;s no way to get the metadata without running third-party code. Environment markers fix this issue in most cases by providing a micro-language that can be used at the field level. At the end, you can write things like that in the metadata:</p>
<pre>    Requires-Dist: pywin32 (&gt;1.0); sys.platform == 'win32'</pre>
<p>And Distutils will provide a tool to parse and execute this expression, so you know if your target platform have to use this metadata field. Meaning that Pip or other tools will be able to read metadata of a project without running any third party code. For example to get all the dependencies of a project depending on the target platform just by querying PyPI.</p>
<p>See all the details <a href="http://www.python.org/dev/peps/pep-0345/#environment-markers" target="_blank">in the section in the PEP</a>.</p>
<h2>PEP 386</h2>
<p>Throughout all the PEP 345, we had to compare versions. To be able to perform this, we need to have a common standard for versions numbers. That&#8217;s what PEP 386 was written for.</p>
<p>The idea is not to force people to version their project using this version scheme, but rather to provide a scheme that is good enough for interoperability and that is human readable.</p>
<p>PEP 386 provides this scheme (in pseudo-format) :</p>
<pre>  N.N[.N]+[{a|b|c|rc}N[.N]+][.postN][.devN]</pre>
<p>The corresponding regular expression is:</p>
<pre>    expr = r"""^
    (?P&lt;version&gt;\d+\.\d+)         # minimum 'N.N'
    (?P&lt;extraversion&gt;(?:\.\d+)*)  # any number of extra '.N' segments
    (?:
        (?P&lt;prerel&gt;[abc]|rc)         # 'a' = alpha, 'b' = beta
                                     # 'c' or 'rc' = release candidate
        (?P&lt;prerelversion&gt;\d+(?:\.\d+)*)
    )?
    (?P&lt;postdev&gt;(\.post(?P&lt;post&gt;\d+))?(\.dev(?P&lt;dev&gt;\d+))?)?
    $"""</pre>
<p>The scheme handles these cases:</p>
<ul>
<li>pre-releases</li>
<li>development versions</li>
<li>final versions</li>
<li>post-release versions</li>
<li>development versions of post-release versions</li>
</ul>
<p>Here are some examples:</p>
<pre>&gt;&gt;&gt; from verlib import NormalizedVersion as V
&gt;&gt;&gt; (V('1.0a1')
...  &lt; V('1.0a2.dev456')
...  &lt; V('1.0a2')
...  &lt; V('1.0a2.1.dev456')
...  &lt; V('1.0a2.1')
...  &lt; V('1.0b1.dev456')
...  &lt; V('1.0b2')
...  &lt; V('1.0b2.post345')
...  &lt; V('1.0c1.dev456')
...  &lt; V('1.0c1')
...  &lt; V('1.0.dev456')
...  &lt; V('1.0')
...  &lt; V('1.0.post456.dev34')
...  &lt; V('1.0.post456'))
True
</pre>
<p>This can look utterly complex to you, but in fact there are good chances that your version scheme is already compatible with this one. We&#8217;ve tested in on PyPI, and 88 % of the projects&#8217; distributions were recognized.</p>
<h3>The suggest_rational_version function</h3>
<p>Let&#8217;s face it: there are hundreds of valid versionning schemes that are not compatible with what we&#8217;ve done. So we are adding a function called <em>suggest_rational_version</em> that can be used to transform a version that is not &#8220;PEP-386&#8243; compliant into one that is compliant.</p>
<p>This does a number of simple normalizations to the given string, based on an observation of versions currently in use on PyPI.</p>
<p>Given a dump of those versions on February 10th 2010, the function has given those results out of the 9066 distributions PyPI had:</p>
<ul>
<li>8058 (88.88%) already match <tt>NormalizedVersion</tt> without any change</li>
<li>795 (8.77%) match when using this suggestion method</li>
<li>213 (2.35%) don&#8217;t match at all.</li>
</ul>
<p>And here&#8217;s an extract of the 2.35% unrecognized scheme:</p>
<ul>
<li>0.2-grigoropoulos</li>
<li>0.1-alphadev</li>
<li>working proof of concept</li>
<li>bzr14</li>
<li>1 (first draft)</li>
</ul>
<p>In other words, they are unusable anyways. If you want to try this on your own versions, grab the code at <a href="http://bitbucket.org/tarek/distutilsversion/" target="_blank">http://bitbucket.org/tarek/distutilsversion/</a>. And if you version doesn&#8217;t match at all and you think its a mistake, let me know so we can work your case.</p>
<h2>Conclusion + my rant on packaging</h2>
<p>I have started working seriously on packaging issues a year ago. And I kept on hearing complaints on how packaging sucks hard. That was frustrating since some folks and I were working hard to change things (and we still do). I kept seeing the same people ranting about packaging, and most of the time they were not willing to help around. I guess that&#8217;s just me being naive, but let me say it one more time <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>If you don&#8217;t like how packaging works in Python, stop complaining and come in the Distutils mailing list, or in #distutils on freenode and help us !</strong></p>
<p>I am now really glad that these PEPs were accepted by Guido because they are the first milestone we had to reach to improve things for real in packaging. Python 2.7 is going to make a big jump forward in this area !</p>
<p>Next milestone we are trying to reach for 2.7 is to finish PEP 376 (uninstall feature, querying installed packages, etc)</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1078/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1078/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1078/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1078/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1078/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1078/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1078/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1078/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1078/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1078/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1078&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/02/10/pep-345-and-386-accepted-summary-of-changes/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>improving Python&#8217;s getpass module</title>
		<link>http://tarekziade.wordpress.com/2010/02/06/improving-pythons-getpass-module/</link>
		<comments>http://tarekziade.wordpress.com/2010/02/06/improving-pythons-getpass-module/#comments</comments>
		<pubDate>Sat, 06 Feb 2010 23:51:31 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1068</guid>
		<description><![CDATA[UPDATED see the end.
The Python standard library has a module called getpass you can use to get a password from the prompt:
&#62;&#62;&#62; import getpass
&#62;&#62;&#62; password = getpass.getpass()
Password:          &#60;-- non-echoed typing here
&#62;&#62;&#62; print password
worked
That&#8217;s nice, and Distutils uses it to ask for your password when you register or upload a release at [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1068&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><strong>UPDATED see the end.</strong></p>
<p>The Python standard library has a module called <a href="http://docs.python.org/library/getpass.html" target="_blank">getpass</a> you can use to get a password from the prompt:</p>
<pre>&gt;&gt;&gt; import getpass
&gt;&gt;&gt; password = getpass.getpass()
Password:          &lt;-- non-echoed typing here
&gt;&gt;&gt; print password
worked</pre>
<p>That&#8217;s nice, and Distutils uses it to ask for your password when you register or upload a release at PyPI, if it&#8217;s not found in your <a href="http://tarekziade.wordpress.com/2009/01/09/distutils-improved-pypirc-for-python-27-and-31/" target="_blank">pypirc</a> file. But this is annoying to type and type again your password, so you end up saving it in <strong>clear text</strong> in pypirc. Thats sucks. And the getpass module gets pretty useless if you want to store and retrieve passwords from other places than the user brain.</p>
<p>But wait&#8230; we have the <a href="http://pypi.python.org/pypi/keyring">Keyring</a> project now.. what about making getpass use Keyring so you can safely read a password from your favorite keyring (Keychain, KWallet, etc..) ?</p>
<p>I&#8217;ve started to write a new getpass module that could do this. But instead of adding a keyring dependency in it and struggling for months (years) to get the addition of Keyring into the stdlib, I have made getpass pluggable.</p>
<p>In my improved version, you can define in a small configuration file (getpass.cfg) an arbritrary function that will be used by getpass for the <em>getpass.getpass</em> API. Here&#8217;s such a file:</p>
<pre>  [getpass]
  getpass-backend = keyring:get_pass_get_password</pre>
<p>Here I am configuring get pass to use the <em>get_pass_get_password</em> function from the <em>keyring</em> package. That&#8217;s a function that gets installed in your Python once Keyring is installed.</p>
<p>This function has the same interface than the default <em>getpass.getpass</em> API and calls keyring.</p>
<p>The modified getpass module is here: <a href="http://bitbucket.org/tarek/getpass/" target="_blank">http://bitbucket.org/tarek/getpass/</a></p>
<p>And works against the current trunk of Keyring.</p>
<p>What I would like to do now is to propose the small changes I&#8217;ve made in Python&#8217;s getpass for inclusion in the stdlib. They are backward compatible changes and offers a simple, yet powerfull way to extend getpass without adding any other module in the stdlib. And maybe adding a setpass in there too would make sense.</p>
<h3>Update from python-ideas</h3>
<p>So I brought up the idea in the mailing lists and it turns out (thanks to the folks at Python-ideas) that the way I want to introduce this feature is not good for these reasons :</p>
<ol>
<li><em>getpass</em> is just a function that is used to get a password from the prompt. you can consider it as a potential, dummy backend for Keyring for example. Trying to make it extendable just denaturates its original purpose.</li>
<li>the only use case right now in the stdlib is for Distutils, so it doesn&#8217;t really make sense to have a keyring in there. People can just use the Keyring project directly.</li>
<li>Now if other parts of the stdlib have the same need, it will be time to think about how it could be included in the stdlib level rather than in Distutils.</li>
</ol>
<p>So, I&#8217;ll work for its inclusion at Distutils level rather thah on getpass level.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1068/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1068/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1068/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1068/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1068/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1068/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1068/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1068/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1068/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1068/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1068&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/02/06/improving-pythons-getpass-module/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>Simple command-line vault : CLVault</title>
		<link>http://tarekziade.wordpress.com/2010/02/01/simple-command-line-vault-clvault/</link>
		<comments>http://tarekziade.wordpress.com/2010/02/01/simple-command-line-vault-clvault/#comments</comments>
		<pubDate>Mon, 01 Feb 2010 17:26:27 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1055</guid>
		<description><![CDATA[I am pretty happy with the Keyring project. I use it now everywhere in my Mercurial-based projects, thanks to mercurial_keyring.
There&#8217;s one other place I&#8217;ve started to use it: I needed a simple command-line based tool to save passwords and read them. The tool I&#8217;ve used so far was KeePass, but I need to run it [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1055&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>I am pretty happy with the <a href="http://pypi.python.org/pypi/keyring">Keyring</a> project. I use it now everywhere in my Mercurial-based projects, thanks to <a href="http://pypi.python.org/pypi/mercurial_keyring">mercurial_keyring</a>.</p>
<p>There&#8217;s one other place I&#8217;ve started to use it: I needed a simple command-line based tool to save passwords and read them. The tool I&#8217;ve used so far was <a href="http://keepass.info/">KeePass</a>, but I need to run it then click on its UI. This is time consuming when I simply want to push a password in the clipboard to use it to unlock something.</p>
<p>So I&#8217;ve wrote these two very simple scripts that use Keyring to store and retrieve passwords</p>
<pre>$ clvault-set blog
Set your password:
Password set.

$ clvault-get blog
The password has been copied in your clipboard</pre>
<p>The code that copy the passwords in the clipboard was tested under Mac OS with its Keychain, but should work under Windows and Linux as well.</p>
<p>I think these scripts can be useful for people like me who spend most of their time in a bash prompt when they are not in Vim or Emacs. So I created a project called CLVault.. You can grab it at the PyPI: <a href="http://pypi.python.org/pypi/CLVault">CLVault PyPI page</a></p>
<p>or install it like this with Pip:</p>
<pre>$ pip install clvault</pre>
<p>Let me know if it&#8217;s useful to you !</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1055/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1055/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1055/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1055/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1055/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1055/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1055/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1055/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1055/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1055/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1055&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/02/01/simple-command-line-vault-clvault/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>Pycon packaging sprint topics</title>
		<link>http://tarekziade.wordpress.com/2010/01/11/pycon-packaging-sprint-topics/</link>
		<comments>http://tarekziade.wordpress.com/2010/01/11/pycon-packaging-sprint-topics/#comments</comments>
		<pubDate>Mon, 11 Jan 2010 22:20:01 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1049</guid>
		<description><![CDATA[Pycon is coming soon. Here&#8217;s a list of possible topics I would like to work on during the sprint:

adding the features in Distutils I&#8217;ve mentioned in my earlier post.
work on the standalone release of Distutils, and make sure it works with 2.4, 2.5, etc so it can be distributed at PyPI. There are already installable [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1049&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>Pycon is coming soon. Here&#8217;s a list of possible topics I would like to work on during the sprint:</p>
<ol>
<li>adding the features in Distutils I&#8217;ve mentioned in my <a href="http://tarekziade.wordpress.com/2010/01/07/possible-new-features-for-distutils-2-7/">earlier post</a>.</li>
<li>work on the standalone release of Distutils, and make sure it works with 2.4, 2.5, etc so it can be distributed at PyPI. There are already <a href="http://python-distribute.org/">installable nightly builds</a> by the way.</li>
<li>Finish the buildbot work so Distutils is tested with more projects from PyPI</li>
<li>Continue the work on Distribute, and specifically the work on 0.7:
<ol>
<li>finish the develop command that would work with non-eggs formats</li>
<li>finish the configure/build/install command where all options are computed and saved by the configure command</li>
</ol>
</li>
<li>Fix plenty of issues in the tracker</li>
<li>work on a geolocalisation feature for Pip, so the nearest mirror can be picked</li>
<li>&#8230;</li>
</ol>
<p>Anyone interested in packaging sprinting at Pycon ? Let me know !</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1049/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1049/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1049/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1049/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1049/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1049/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1049/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1049/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1049/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1049/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1049&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/01/11/pycon-packaging-sprint-topics/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>Fixing packaging terminology confusion</title>
		<link>http://tarekziade.wordpress.com/2010/01/07/fixing-packaging-terminology-confusion/</link>
		<comments>http://tarekziade.wordpress.com/2010/01/07/fixing-packaging-terminology-confusion/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 21:30:22 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1039</guid>
		<description><![CDATA[Edit: the discussion is still going on, so I&#8217;ve probably blogged that a little bit early (I was excited about it  ). Stay tuned for the final output.
Brad Allen launched a thread in Distutils-SIG about packaging terminology confusion. In particular the usage of the word &#8220;package&#8221; in our community. Part of the confusion is [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1039&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p><em>Edit: the discussion is still going on, so I&#8217;ve probably blogged that a little bit early (I was excited about it <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> ). Stay tuned for the final output.</em></p>
<p>Brad Allen launched a thread in <a href="http://mail.python.org/pipermail/distutils-sig/2010-January/015232.html" target="_blank">Distutils-SIG</a> about packaging terminology confusion. In particular the usage of the word &#8220;<strong>package</strong>&#8221; in our community. Part of the confusion is because of the meaning of this word in Python (that is, a directory containing one of several Python modules, with a special one named __init__.py) and in some systems like Debian (there, a package is a distribution file for a library or an application).</p>
<p>This confusion was present in PEP 345 (which was started years ago, so that explains it) &#8211; and is present in Distutils documentation and also in PyPI (That is: Python <strong>Package</strong> Index).</p>
<p>I really like Tres Seaver&#8217;s definitions, because they match prefectly the reality:</p>
<ul>
<li><strong>package</strong> means a Python package, (directory intended to be on sys.path, with an __init__.py.  We *never* mean a distributable or installable archive, except when &#8220;impedance matching&#8221; with folks who think in terms of operating system distributions.</li>
<li><strong>distribution</strong> is such a distributable / installable archive: either in source form (an &#8217;sdist&#8217;), or one of the binary forms (egg., etc.). Any distribution may contain multiple packages (or even no packages, in the case of standalone scripts).</li>
<li><strong>project</strong> is the process / community which produces releases of a given set of software, identified by a name unique within PyPI&#8217;s namespace.  PyPI manages metadata about projects (names, owners) and their releases.  Every real project has at least one release.</li>
<li><strong>release</strong> is a set of one or more distributions of a project, each sharing the same version.  Some PyPI metadata is specific to a release, rather than a project.  Every release has at least one distribution.</li>
</ul>
<p>And I really like Martin&#8217;s proposal in the thread (in Catalog-SIG since it was cross-posted): &#8220;PyPI would then be the <strong>Python Project Index</strong>.&#8221;</p>
<p>I&#8217;ll fix Distutils documentation on my side accordingly, as well as the <a href="http://guide.python-distribute.org">guide</a> we are building. Let&#8217;s promote these definitions <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1039/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1039/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1039/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1039/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1039/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1039/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1039/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1039/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1039/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1039/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1039&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/01/07/fixing-packaging-terminology-confusion/feed/</wfw:commentRss>
		<slash:comments>11</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
		<item>
		<title>Possible new features for Distutils 2.7</title>
		<link>http://tarekziade.wordpress.com/2010/01/07/possible-new-features-for-distutils-2-7/</link>
		<comments>http://tarekziade.wordpress.com/2010/01/07/possible-new-features-for-distutils-2-7/#comments</comments>
		<pubDate>Thu, 07 Jan 2010 06:46:08 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=1031</guid>
		<description><![CDATA[While PEP 345 and PEP 386 are waiting for the final approval, I am back at work on Distutils code work, PEP 376, Distribute, and the HitchHicker guide to Packaging. The latter is growing faster than I have expected, thanks to the contributions of John Gabriele. It has quite some content already. I think the [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1031&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<p>While PEP 345 and PEP 386 are waiting for <a href="http://mail.python.org/pipermail/python-dev/2010-January/094771.html" target="_blank">the final approval</a>, I am back at work on Distutils code work, PEP 376, Distribute, and the HitchHicker guide to Packaging. The latter is growing faster than I have expected, thanks to the contributions of John Gabriele. <a href="http://guide.python-distribute.org" target="_blank">It has quite some content already</a>. I think the guide is an important task, and I&#8217;ll try to focus on it in this first trimester.</p>
<h3>Distutils 2.7 new features</h3>
<p>Python 2.7 first beta version is <a href="http://www.python.org/dev/peps/pep-0373/#release-schedule" target="_blank">around the corner</a>, and once it&#8217;s reached we can&#8217;t add new features. So, besides the code that will be changed if the PEPs we worked on at Distutils-SIG are accepted, here&#8217;s a list of small features I&#8217;d like to introduce in Distutils:</p>
<ul>
<li><strong>a test command</strong>, that just uses the new <a href="http://docs.python.org/dev/library/unittest.html#test-discovery">unittest discovery script</a> to run unittest-compatible tests.</li>
<li><strong>a new option for sdist called &#8216;extra_files&#8217;</strong>, that will allow to list extra files to be included in the distribution. These files will not be installed by &#8216;install&#8217;, just be part of the distribution. This will allow including files like CHANGELOG, etc.. without having to use a MANIFEST template.</li>
<li><strong>a very basic pre/post commit hook for the install command</strong>. These hooks will be deactivated when any bdist_* command runs install to create the binary tree. Now for bdist_rpm own hooks, I guess the best way would be to make install consumes the same two options than bdist_rpm (pre-install, post-install) so a project will be able to define a hook that is used by RPM and/or <em>python setup.py install</em></li>
</ul>
<p>If you think about something that should be added in 2.7, speak up !</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/1031/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/1031/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/1031/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=1031&subd=tarekziade&ref=&feed=1" />]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2010/01/07/possible-new-features-for-distutils-2-7/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/5e5142d6a1a578f02e2d94c4d6d31088?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">tarek</media:title>
		</media:content>
	</item>
	</channel>
</rss>