<?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: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 Python programming language, in a pure Frenglish style</description>
	<lastBuildDate>Sat, 07 Nov 2009 01:43:13 +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://s.wordpress.com/i/buttonw-com.png</url>
		<title>Fetchez le Python</title>
		<link>http://tarekziade.wordpress.com</link>
	</image>
			<item>
		<title>virtualenv and zc.buildout now with Distribute included</title>
		<link>http://tarekziade.wordpress.com/2009/11/07/virtualenv-and-zc-buildout-now-with-distribute-included/</link>
		<comments>http://tarekziade.wordpress.com/2009/11/07/virtualenv-and-zc-buildout-now-with-distribute-included/#comments</comments>
		<pubDate>Sat, 07 Nov 2009 01:36:09 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[distribute]]></category>
		<category><![CDATA[distutils]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[zc.buildout]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=973</guid>
		<description><![CDATA[We are still actively working in fixing all the remaining bugs in Distribute (our Setuptools fork).
But we have reached an important milestone this week: both virtualenv and zc.buildout now comes with an option to switch to Distribute.
In virtualenv:
$ virtualenv --distribute ENV
In zc.buildout, using its bootstrap.py file:
$ python bootstrap.py --distribute
Enjoy !
For those who may wonder why [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=973&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We are still actively working in fixing all the remaining bugs in <a href="http://pypi.python.org/pypi/distribute">Distribute</a> (our Setuptools fork).</p>
<p>But we have reached an important milestone this week: both <a href="http://pypi.python.org/pypi/virtualenv/1.4" target="_blank">virtualenv</a> and <a href="http://pypi.python.org/pypi/zc.buildout" target="_blank">zc.buildout</a> now comes with an option to switch to Distribute.</p>
<p>In virtualenv:</p>
<pre>$ virtualenv --distribute ENV</pre>
<p>In zc.buildout, using its bootstrap.py file:</p>
<pre>$ python bootstrap.py --distribute</pre>
<p>Enjoy !</p>
<p>For those who may wonder why they should switch to Distribute over Setuptools, it&#8217;s quite simple:</p>
<ul>
<li>Distribute 0.6.x is a drop-in replacement for Setuptools</li>
<li>Distribute is actively maintained, and has over 10 commiters</li>
<li>Distribute 0.6.x offers Python 3 support !</li>
</ul>
<p>And if you still struggle with packaging issues, the place to hang around to get some help is the #distutils IRC channel on Freenode.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/973/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/973/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/973/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=973&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/11/07/virtualenv-and-zc-buildout-now-with-distribute-included/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>First Distribute mini-sprint (online)</title>
		<link>http://tarekziade.wordpress.com/2009/10/16/first-distribute-mini-sprint-online/</link>
		<comments>http://tarekziade.wordpress.com/2009/10/16/first-distribute-mini-sprint-online/#comments</comments>
		<pubDate>Fri, 16 Oct 2009 19:36:20 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[distribute]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=966</guid>
		<description><![CDATA[While we are working at fixing bugs in 0.6.x, we are organizing a first online coding sprint for the 0.7.x series, and for various community tasks.
What are we going to do ?

We need to finalize the 0.7.x renaming and splitting work
We also need to define a more detailed roadmap for each splitted package (new features, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=966&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>While we are working at fixing bugs in 0.6.x, we are organizing a first online coding sprint for the 0.7.x series, and for various community tasks.</p>
<h3>What are we going to do ?</h3>
<ul>
<li>We need to finalize the 0.7.x renaming and splitting work</li>
<li>We also need to define a more detailed roadmap for each splitted package (new features, deprecations, etc.)</li>
<li>We need to build a better test environment, and see if we can set up a buildbot for our work</li>
<li>We need to write a tutorial explaining how Distribute can be used in a project. (Python 3 support, Moving from Setuptools to Distribute, etc)</li>
</ul>
<h3>Who can join ?</h3>
<p>There are no particular level required to participate, but we won&#8217;t be able in this session to teach to participants how to work with Mercurial, Python, etc. But if you want to help in the Documentation part or testing, it&#8217;s as important and useful as the code and we are welcoming you.</p>
<p>Last, if you are just interested in evaluating Distribute for your project, you are welcome to join, we will help you.</p>
<h3>Where ?</h3>
<p>Online, on IRC &#8211; Freenode &#8211; #distutils channel</p>
<h3>When, how long and how ?</h3>
<p>Possible times (all CEST +0200 UTC) :</p>
<ul>
<li> Sunday October 18th &#8211; 6 pm</li>
<li> Tuesday October 20th &#8211; 7 pm</li>
<li> Wenesday October 21th &#8211; 7 pm</li>
<li> Friday October 23th &#8211; 7 pm</li>
</ul>
<p>The sprint will be held for a minimum of 3 hours, and people will be free to leave when they want.</p>
<p>The most important thing is to be present on time when the sprint starts, so we can make groups and kick it off. If you want to join, add your name here: <a href="http://doodle.com/bfgv3yi3pi48buuv" target="_blank">http://doodle.com/bfgv3yi3pi48buuv</a></p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/966/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/966/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/966/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=966&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/10/16/first-distribute-mini-sprint-online/feed/</wfw:commentRss>
		<slash:comments>5</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>top-posting, mobile devices, mail threads and semantics</title>
		<link>http://tarekziade.wordpress.com/2009/10/11/top-posting-mobile-devices-mail-threads-and-semantics/</link>
		<comments>http://tarekziade.wordpress.com/2009/10/11/top-posting-mobile-devices-mail-threads-and-semantics/#comments</comments>
		<pubDate>Sun, 11 Oct 2009 10:55:35 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=946</guid>
		<description><![CDATA[There&#8217;s an interesting discussion on python-dev about how hard it is to follow a thread when people are starting to top-post, meaning they are answering by quoting the whole text and putting their answers at the top. I even got bitten by someone once because I was top-posting (don&#8217;t get me wrong, he was right [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=946&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>There&#8217;s an interesting discussion on python-dev about how hard it is to follow a thread when people are starting to top-post, meaning they are answering by quoting the whole text and putting their answers at the top. I even got bitten by someone once because I was top-posting (don&#8217;t get me wrong, he was right about it, I was just not fully aware of the problem)</p>
<p>First of all, if you use a mobile device, there are good chances that the mail application you are using doesn&#8217;t give you the choice : it will quote the text for you and will let you answer at the top. That&#8217;s how it works on my android (HTC) phone and I couldn&#8217;t find a way to change it. I am expecting mail apps on mobile devices to improve on this.</p>
<p>But this problem reflects how hard it is to follow a thread with +100 answers. Worse, depending on the way people are quoting to provide an answer for a specific part of a mail, some people will just stop reading it.</p>
<p>Gmail is doing a pretty good job to reduce this problem, because it will automagically hide old content and you will only see new content on every new mail in the thread.</p>
<p>But some people are not using Gmail for good reasons.</p>
<p>The other problem with gigantic threads at python-dev is that they often end up in a tree of several sub-threads, making it very hard to follow what&#8217;s going on if you don&#8217;t sort mails by threads in your client. And again, this is not possible in some mail clients.</p>
<p>I was very frustrated about this problem on gigantic threads about Distutils because I was seeing people &#8220;lost&#8221; in a branch of the thread, asking questions that were answered at the other end of the tree.</p>
<p>So how could we improve on this ?</p>
<p>Imho, mail threads are not suited for design discussions. I think a way to improve the situation could be to link mails by keywords.</p>
<p>Everytime you answer a mail, instead of quoting some of its text, you provide some keywords related to the topic you want to discuss, and you just type a plain answer. Your answer and the original mail will then be linked through a semantical relation, like a RDF triplet. These keywords could be new headers in the mail that is sent.</p>
<p>Let&#8217;s imagine all mail client are able to sort and browse the threads by keywords, and to list the used keywords on the side of the thread. Meaning that everytime you send a mail, you can pick one of the keyword that was already used, to limit the number of keywords.</p>
<p>Does that make any sense ?</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/946/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/946/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/946/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=946&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/10/11/top-posting-mobile-devices-mail-threads-and-semantics/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>Distribute 0.6.4 released &#8211; zc.buildout support</title>
		<link>http://tarekziade.wordpress.com/2009/10/10/distribute-0-6-4-released-zc-buildout-support/</link>
		<comments>http://tarekziade.wordpress.com/2009/10/10/distribute-0-6-4-released-zc-buildout-support/#comments</comments>
		<pubDate>Sat, 10 Oct 2009 22:53:47 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[distribute]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[zc.buildout]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=937</guid>
		<description><![CDATA[We&#8217;ve juste released Distribute 0.6.4.
This version is now fully compatible with zc.buildout, meaning that you can use Distribute in your buildout transparently as long as you use our special zc.buildout bootstrap file located here : http://nightly.ziade.org/bootstrap.py.
We&#8217;ve also added in Jannis&#8217; upload_docs command, that allows a project to upload its Sphinx based documentation to PyPI.
As a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=937&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>We&#8217;ve juste released <a href="http://pypi.python.org/pypi/distribute" target="_blank">Distribute 0.6.4</a>.</p>
<p>This version is now fully compatible with <a href="http://pypi.python.org/pypi/zc.buildout" target="_blank">zc.buildout</a>, meaning that you can use Distribute in your buildout transparently as long as you use our special zc.buildout bootstrap file located here : <a href="http://nightly.ziade.org/bootstrap.py" target="_blank">http://nightly.ziade.org/bootstrap.py</a>.</p>
<p>We&#8217;ve also added in <a href="http://pypi.python.org/pypi/Sphinx-PyPI-upload" target="_blank">Jannis&#8217; upload_docs command</a>, that allows a project to upload its Sphinx based documentation to PyPI.</p>
<p>As a matter of fact, Distribute is using it now and you can reach its documentation at : <a href="http://packages.python.org/distribute" target="_blank">http://packages.python.org/distribute</a>.</p>
<p>If you have any feedback, or want to help around, drop us a mail at <a href="http://mail.python.org/mailman/listinfo/distutils-sig/" target="_blank">distutils-sig</a> or come in our IRC channel in #distutils (freenode)</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/937/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/937/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/937/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=937&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/10/10/distribute-0-6-4-released-zc-buildout-support/feed/</wfw:commentRss>
		<slash:comments>1</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 2.6.3 and Distribute.</title>
		<link>http://tarekziade.wordpress.com/2009/10/03/python-2-6-3-and-distribute/</link>
		<comments>http://tarekziade.wordpress.com/2009/10/03/python-2-6-3-and-distribute/#comments</comments>
		<pubDate>Sat, 03 Oct 2009 14:20:51 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[distribute]]></category>
		<category><![CDATA[distutils]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=926</guid>
		<description><![CDATA[Python 2.6.3 is out, will a lot of bugs fixed. I had my share with Distutils and fixed quite a few, and 2.6.3 is looking very good so far !
Just a quick note for Setuptools users: you might bump into a problem if you provide a C extension. The setuptools code makes some assumptions on [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=926&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://python.org/download/">Python 2.6.3</a> is out, will a lot of bugs fixed. I had my share with Distutils and fixed quite a few, and 2.6.3 is looking very good so far !</p>
<p>Just a quick note for Setuptools users: you might bump into a problem if you provide a C extension. The setuptools code makes some assumptions on <em>how</em> and in <em>which order</em> the Distutils <em>build_ext</em> API are called. It also overrides some of these API to do some internal extra work. In other words, the way Setuptools patches Distutils makes it very sensitive to any internal Distutils code changes. In this particulare case you might have this bug:</p>
<pre>File "...setuptools/command/build_ext.py", line 85, in get_ext_filename   KeyError: 'xxx'</pre>
<p>The fix is quite simple, it can be done by the end-user or in your package (which is better of course).</p>
<ul>
<li>In your package : use &#8220;<a href="http://ttp://pypi.python.org/pypi/distribute">Distribute</a> &gt;= 0.6.3&#8243; distribution instead of the usual &#8220;Setuptools == 0.6c9&#8243; distribution in you dependencies list. The code remain unchanged and you can still &#8220;import setuptools&#8221; and have it working fine.</li>
<li>As an end-user: just do a Distribute installation and your fine &#8220;(sudo) easy_install Distribute&#8221;</li>
</ul>
<p>Hang in <em>#distutils</em> on Freenode, or drop a mail in <a href="http://mail.python.org/mailman/listinfo/distutils-sig">distutils-SIG</a> in case you have a problem.</p>
<p>Just to make things clear: The Distribute 0.6.x series is a mirror of Setuptools 0.6c9 code, with bug fixes.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/926/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/926/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/926/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=926&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/10/03/python-2-6-3-and-distribute/feed/</wfw:commentRss>
		<slash:comments>12</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>Got Python 3 support ?</title>
		<link>http://tarekziade.wordpress.com/2009/09/26/got-python-3-support/</link>
		<comments>http://tarekziade.wordpress.com/2009/09/26/got-python-3-support/#comments</comments>
		<pubDate>Sat, 26 Sep 2009 20:06:04 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[distribute]]></category>
		<category><![CDATA[distutils]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=920</guid>
		<description><![CDATA[One thing that slows down the adoption of Python 3 is the low number of available third party projects. If your project depends on some other projects, you are pretty lucky if they are all available under Python 3.
I don&#8217;t think that the problem comes from the Python 3 syntax adoption, because Python provides a [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=920&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>One thing that slows down the adoption of Python 3 is the low number of available third party projects. If your project depends on some other projects, you are pretty lucky if they are all available under Python 3.</p>
<p>I don&#8217;t think that the problem comes from the Python 3 syntax adoption, because Python provides a pretty powerful tool to convert your Python 2 code into Python 3 code, called <a href="http://docs.python.org/library/2to3.html">2to3</a>. (notice that the backward process is also available since this summer : <a href="http://pypi.python.org/pypi/3to2">3to2</a>).</p>
<p>The biggest issue in my opinion is the lack of packaging support. Distutils itself works fine on Python 3, but I am talking about Setuptools, which is widely used in the community and doesn&#8217;t work under Python 3. So if your project, or one of its dependency uses Setuptools, you can&#8217;t switch to Python 3.</p>
<p>Well, I am glad to say that this is not true anymore, thanks to Martin von Löwis, <a href="http://regebro.wordpress.com/2009/09/25/setuptools-on-python-3-status-pretty-damn-good/">Lennart Regebro</a> and Alex Grönholm that have been working on Distribute&#8217;s Python 3 support lately.</p>
<p>The <a href="http://pypi.python.org/pypi/distribute">Distribute</a> project is a fork of the Setuptools project and is now fully compatible with Python 3.</p>
<p>If you are using Setuptools, install Distribute 0.6.3, read its docs/python3.txt file and add Python 3 support to your project.</p>
<p>And if you need help in porting your distribution to Python 3, drop in <a href="http://mail.python.org/mailman/listinfo/distutils-sig/">Distutils-SIG</a>, we will help you.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/920/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/920/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/920/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/920/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/920/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/920/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/920/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/920/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/920/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/920/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=920&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/09/26/got-python-3-support/feed/</wfw:commentRss>
		<slash:comments>9</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>static metadata for distutils</title>
		<link>http://tarekziade.wordpress.com/2009/09/12/static-metadata-for-distutils/</link>
		<comments>http://tarekziade.wordpress.com/2009/09/12/static-metadata-for-distutils/#comments</comments>
		<pubDate>Sat, 12 Sep 2009 00:25:05 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[distutils]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=893</guid>
		<description><![CDATA[In Distutils, every package has some metadata fields, defined in PEP 314.
The setup.py script is the place where you provide them, by calling the setup function, located in distutils.core. Each argument passed to the function can be one of these metadata.
So basically, you can describe your distribution in the setup.py file like this:

from distutils.core import [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=893&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>In Distutils, every package has some metadata fields, defined in <a href="http://www.python.org/dev/peps/pep-0314">PEP 314</a>.</p>
<p>The <em>setup.py</em> script is the place where you provide them, by calling the <em>setup</em> function, located in <em>distutils.core</em>. Each argument passed to the function can be one of these metadata.</p>
<p>So basically, you can describe your distribution in the <em>setup.py</em> file like this:</p>
<blockquote>
<pre>from distutils.core import setup</pre>
<pre>setup(name='MyDistribution', version='0.1', description='cool',
      <span style="color:#808080;">packages=['my_package'], ext_modules=[Extension('foo', 'foo.c')]</span>)</pre>
</blockquote>
<p>Notice that <em>packages</em> and <em>ext_modules</em> in this example are not part of the Metadata fields. They are extra fields used by some commands.</p>
<p>From there, various <em>distutils</em> commands can be called using this script. They will get these options and act upon.</p>
<p>For instance, the <em>sdist</em> command will build a source distribution and create a static <em>PKG-INFO</em> file that contains the metadata fields. It will extract them from the arguments you&#8217;ve passed to <em>setup.py</em>.</p>
<p>The <em>install</em> command will install this <em>PKG-INFO</em> file in your Python installation alongside your packages and modules (since Python 2.5) and some tools like Distribute or Setuptools will let you read these information once the distribution is installed.</p>
<p>You can even get the metadata fields values by asking for them directly through <em>setup.py</em>:</p>
<blockquote>
<pre>$ python setup.py --name</pre>
<pre>MyDistribution</pre>
</blockquote>
<p>Another example : the  <em>register</em> command can send the metadata or your distribution to PyPI. They will be made available on PyPI website and also through its XML-RPC interface:</p>
<blockquote>
<pre>&gt;&gt;&gt; import xmlrpclib
&gt;&gt;&gt; server = xmlrpclib.Server('http://pypi.python.org/pypi')
&gt;&gt;&gt; server.release_data('distribute', '0.6')['author']
'The fellowship of the packaging'
&gt;&gt;&gt; server.release_data('distribute', '0.6')['keywords']
'CPAN PyPI distutils eggs package management'</pre>
</blockquote>
<h3>Limitations of metadata</h3>
<p>Metadata are pretty handy, but there are some obstructing limitations we bumped into when we started to work on packaging matters during last Pycon.</p>
<h4>Platform-dependant metadata</h4>
<p>We wanted to extend the Metadata fields list in order to add a &#8220;<em>require</em>s&#8221; field that can be used to list the requirements (in term others python packages or modules).</p>
<p>For instance, if you want to define that your project depends on <em>simplejson</em>, you could write:</p>
<blockquote>
<pre>from distutils.core import setup

setup(name='MyDistribution', version='0.1', description='cool',
      packages=['my_package'], ext_modules=[Extension('foo', 'foo.c')],
      requires=['simplsjon'])</pre>
</blockquote>
<p>This is not a new proposal. It was proposed in <a href="http://www.python.org/dev/peps/pep-0345/" target="_blank">PEP 345</a>, but never really used.</p>
<p>Since then, Setuptools provided a similar field, called &#8220;<em>install_requires</em>&#8221; together with <em>easy_install </em>script that acts a bit like a package manager. <em>easy_install</em> reads the requirements and install them when you install a distribution.</p>
<p>But the limitation of those requirement fields is that they might be platform-dependant. For example, you don&#8217;t need to install <em>simplejson</em> anymore under 2.6 since a json library was included in the standard library. In other cases you might have different dependencies depending if you run under windows or linux, and so on.</p>
<p>So to be able to get the metadata right, you have to work a little bit in your <em>setup.py </em>file:</p>
<blockquote>
<pre>from distutils.core import setup
import sys</pre>
<pre>if sys.version_info[0] == 2 and sys.version_info[1] &lt; 6:
    requires = ['simplejson']
else:
    requires = []</pre>
<pre>setup(name='MyDistribution', version='0.1', description='cool',
      packages=['my_package'], ext_modules=[Extension('foo', 'foo.c')],
      requires=requires)</pre>
</blockquote>
<p>But the metadata will only be available at install time, when the <em>install</em> command will execute the code of <em>setup.py</em> on the target system.</p>
<h4>Code-dependant metadata</h4>
<p>In other words, once a field like <em>requires</em> is added in the Metadata, you will not know for sure if it&#8217;s reliable when you look at the project page at PyPI. That&#8217;s because the metadata you will see there will be the one created by the person that called the <em>register</em> command and sent the result. This result is tighted to his environment, not yours.</p>
<p>To be able to get the metadata for your environment you will need to run that code again, by downloading the package, then running a <em>setup.py</em> command.</p>
<p>Let&#8217;s try to do it with the <em>lxml</em> source distribution. Let&#8217;s try to get the <em>name</em> field :</p>
<blockquote>
<pre>$ python setup.py --name
Building lxml version 2.2.2.
NOTE: Trying to build without Cython, pre-generated 'src/lxml/lxml.etree.c' needs to be available.
Using build configuration of libxslt 1.1.12
Building against libxml2/libxslt in the following directory: /usr/lib
lxml</pre>
</blockquote>
<p>What happened here ? Frankly I am not sure. But asking for the name (that appears on the last line) called a bunch of code located in the distribution.</p>
<p>I could probably ask the lxml team to fix this output, and make sure <em>setup.py</em> can still be used to work with the metadata, but this was just to demonstrate a flaw in the way Distutils works :  you need to run third party code just to get the metadata of a distribution you&#8217;re not even sure you are going to install on your system.</p>
<h3>The setup.cfg file</h3>
<p>Part of the problem can be resolved by putting the metadata in a static file alongside <em>setup.py</em>. As a matter of fact, the <em>setup.cfg</em> file is already used by distutils to store some options. There&#8217;s even a <em>global</em> section that can be used to set the metadata into the <em>Distribution</em> object Distutils creates when you run <em>setup()</em>. Using the global section that way is not documented and probably not intended. What&#8217;s intended is to be able to set some global options like &#8220;verbose&#8221; or such things.</p>
<p>See <a href="http://docs.python.org/install/index.html#syntax-of-config-files" target="_blank">http://docs.python.org/install/index.html#syntax-of-config-files</a></p>
<p>But the code is a generic setter, that allows you to pass any field (so the metadata). Call it a bug if you want, but I was pretty excited to see that I could pass my metadata to Distutils through it. Unfortunately these values are not passed to the <em>DistributionMetadata</em> subobject in Distutils, so it doesn&#8217;t work exactly like the arguments passed to <em>setup()</em>. Too bad <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> <em><br />
</em></p>
<p>I could change this right away in the code, but we have better plans I think.</p>
<h4>A new setup section</h4>
<p>Instead of working in the <em>global</em> section which should stay specific to running options, let&#8217;s create a new section and put the metadata in them.</p>
<blockquote>
<pre>[setup]</pre>
<pre>name: MyDistribution</pre>
<pre>version: 0.1</pre>
<pre>description: cool</pre>
</blockquote>
<p>The <em>setup.py</em> script stays, but is now not containing any metadata field, and does only contain what I would call &#8220;working arguments&#8221;. e.g. argument used by commands that are not part of the Metadata:</p>
<blockquote>
<pre>from distutils.core import setup</pre>
</blockquote>
<blockquote>
<pre>setup(<span style="color:#000000;">packages=['my_package'], ext_modules=[Extension('foo', 'foo.c')]</span>)</pre>
</blockquote>
<h4>What about platform-dependant fields ?</h4>
<p>In order not to require any third party code to read the metadata, we need a way to express platform-dependant fields in the<em> setup.cfg</em> file.</p>
<p>The proposed way is to have platform-dependant sections :</p>
<blockquote>
<pre>[setup]</pre>
<pre>name: MyDistribution</pre>
<pre>version: 0.1</pre>
<pre>description: cool</pre>
<pre>conditional-sections: py25</pre>
<pre>[py25]</pre>
<pre>condition: python_version == '2.5'</pre>
<pre>requires: simplejson</pre>
</blockquote>
<p>The <em>py25</em> section is read only if the expression is true.</p>
<p>Another example:</p>
<blockquote>
<pre>[setup]</pre>
<pre>name: MyDistribution</pre>
<pre>version: 0.1</pre>
<pre>description: cool</pre>
<pre>conditional-sections: py25, py26</pre>
<pre>[py25]</pre>
<pre>condition: python_version == '2.5' or python_version == '2.4'</pre>
<pre>requires: simplejson
<pre>[py26]
condition: python_version == '2.6' and sys_platform == 'win32'
requires: bar</pre>
</pre>
</blockquote>
<p>here, &#8220;<em>bar</em>&#8221; will be installed under Python 2.6 under Windows, and &#8220;<em>simpljson</em>&#8221; under Python 2.5 or 2.4 on any platform.</p>
<p>Distutils will provide a new function that is able to interpret the expressions provided in the condition, and calculate the metadata depending on the platform.</p>
<p>That&#8217;s still some code we are running here, but:</p>
<ul>
<li>We are restricting the execution context to the bare minimum: <em>python_version</em>, <em>sys_platform</em>, <em>os_name</em>, and all values returned by <em>os.uname()</em></li>
<li>The function will be vanilla Python: you will be able to extract the metadata without running a third party code, and knowing that the execution is restricted to a few string comparisons.</li>
<li>The code can be executed at PyPI without any potential security issue, meaning that the XML-RPC functions will be able to send you back the metadata of a packages depending on your environment. In other word, a package manager would be able to list all the dependency of a distribution for the target platform without downloading any of these distribution.</li>
</ul>
<h4>There will always be edge cases</h4>
<p>For the 1% of distributions that need more work to calculate the metadata,<em> setup.py</em> will still be present and any option passed as an argument will override a value provided by <em>setup.cfg</em>. They&#8217;ll just have to add a flag in the <em>setup.cfg</em> file, indicating that it does not provides all the metadata, and that running <em>setup.py</em> is required:</p>
<blockquote>
<pre>[setup]
name: MyDistribution
version: 0.1
description: cool
static-metadata: false</pre>
</blockquote>
<p>If this flag is present, people will now that running setup.py is mandatory to get the full set of metadata.</p>
<p>For example, if the web service provided at PyPI to get the  metadata, will be able to return a platform specific set if we provide the target environment. Let&#8217;s say we add in distutils an &#8216;<em>execution_environment</em>&#8216; that returns the environment used to interpret the <em>setup.cfg</em> file:</p>
<pre>&gt;&gt;&gt; import xmlrpclib
&gt;&gt;&gt; server = xmlrpclib.Server('http://pypi.python.org/pypi')
&gt;&gt;&gt; from distutils.util import execution_environment
&gt;&gt;&gt; execution_environment
{'os_version': 'Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386',
 'os_name': 'posix',
 'python_version': '2.6',
 'os_release': '9.8.0',
 'os_sysname': 'Darwin',
 'os_nodename': 'MacZiade',
 'os_machine': 'i386',
 'sys_platform': 'darwin'}

&gt;&gt;&gt; server.release_data('MyDistribution', '0.6', execution_environment)['requires']
['foo', 'bar']
<pre>&gt;&gt;&gt; server.release_data('MyDistribution', '0.6', execution_environment)['static-metadata']</pre>
<p>True</pre>
<p>PyPI will be able to generate the metadata by interpreting the <em>setup.cfg</em> file with the <em>execution_environment</em> info.</p>
<h4>What happens now ?</h4>
<p>I won&#8217;t write a PEP for this. I don&#8217;t think it&#8217;s necessary because this feature is backward compatible, and if people don&#8217;t use it in Python 2.7 and 3.2, it will just fade away, like other things in Distutils.</p>
<p>But we need to reach a consensus at Distutils-SIG then inform about it at Python-dev. I just hope we will have this consensus real quickly, unlike most topics we are working on for a year <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Or maybe I should be a bit of a dictator for this feature and just go ahead and add it ? Because as <a href="http://sayspy.blogspot.com/">Brett</a> told me several times, it&#8217;s impossible to make everyone happy about everything. And I&#8217;d like to see Distutils move on. There&#8217;s so much left to do&#8230;</p>
<p>What do you think ? How do you like that feature ?</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/893/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/893/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/893/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/893/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/893/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/893/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/893/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/893/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/893/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/893/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=893&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/09/12/static-metadata-for-distutils/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>Gsoc is over, we have a Python Keyring lib</title>
		<link>http://tarekziade.wordpress.com/2009/08/25/gsoc-is-over-we-have-a-python-keyring-lib/</link>
		<comments>http://tarekziade.wordpress.com/2009/08/25/gsoc-is-over-we-have-a-python-keyring-lib/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 12:04:13 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[gsoc]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=891</guid>
		<description><![CDATA[The Google Summer of Code is over and the first version of the keyring library was released last week by Kang at PyPI.
How Keyring works, the big picture
This library implements a simple plugin system. Each plugin has to implement a set of methods described in an abstract class and can wrap any underlying Keyring system. [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=891&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>The Google Summer of Code is over and the<a href="http://pypi.python.org/pypi/keyring" target="_blank"> first version of the keyring library was released</a> last week by Kang at PyPI.</p>
<h2>How Keyring works, the big picture</h2>
<p>This library implements a simple plugin system. Each plugin has to implement a set of methods described in an abstract class and can wrap any underlying Keyring system. We called those plugins &#8220;<em><strong>backends</strong></em>&#8220;. The nice thing about it is that you can implement your own custom backend and make it available through the Keyring configuration file.</p>
<p>Kang has coded various Keyring backends in C and C++ extensions, for KWallet, Keychain, and Gnome. We also have added a Keyring implementation that uses the Win32Crypto API so windows users can use the lib.</p>
<p>When the Keyring lib is used, all declared plugins, whether they are provided by the lib itself or by a third party package, will be loaded. Then they will be asked a simple question:</p>
<blockquote><p>&#8220;Can you run in this environment ?&#8221;</p></blockquote>
<p>The backend can answer one of these:</p>
<ul>
<li>&#8220;Yes, I could work in this environment&#8221;</li>
<li>&#8220;No, I can&#8217;t&#8221;</li>
<li>&#8220;Yes and you should use me  !&#8221;</li>
</ul>
<p>The library filters out backends that can&#8217;t work on the target, sort the remaining ones, and get one of the best backend. This doesn&#8217;t happens of course if you explicitely define which backend you want to use, which is possible.</p>
<h2>What&#8217;s next</h2>
<p>Keyring 0.1 is out and there will probably be 1 or 2 releases to stabilize the code.</p>
<p>The next steps will be :</p>
<ul>
<li>to use it in Distutils, with a soft dependency : Distutils will let you use it through configuration if it detects Keyring is installed.</li>
<li>to promote its usage and in particular see if projects like Mercurial could use it</li>
<li>to work on a PEP for its integration in Python stdlib, in the getpass module</li>
</ul>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/891/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/891/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/891/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=891&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/08/25/gsoc-is-over-we-have-a-python-keyring-lib/feed/</wfw:commentRss>
		<slash:comments>9</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>Gsoc Keyring project &#8211; post-midterm quick status</title>
		<link>http://tarekziade.wordpress.com/2009/08/05/gsoc-keyring-project-post-midterm-quick-status/</link>
		<comments>http://tarekziade.wordpress.com/2009/08/05/gsoc-keyring-project-post-midterm-quick-status/#comments</comments>
		<pubDate>Wed, 05 Aug 2009 21:24:30 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[gsoc]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=885</guid>
		<description><![CDATA[Kang (my Gsoc student) work is going very well on the Python Universal Keyring Library. He&#8217;s basically finished to implement back ends for major keyring systems:

Apple  KeyChain
Gnome Keyring
KDE Wallet

And for Windows users, there&#8217;s an extra back end based on  Win32CryptoKeyring, which stores a crypted version of the password in a file. Last, there&#8217;s another File-based [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=885&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p><a href="http://kangzhang-en.blogspot.com/" target="_blank">Kang</a> (my Gsoc student) work is going very well on the Python Universal Keyring Library. He&#8217;s basically finished to implement back ends for major keyring systems:</p>
<ul>
<li>Apple  KeyChain</li>
<li>Gnome Keyring</li>
<li>KDE Wallet</li>
</ul>
<p>And for Windows users, there&#8217;s an extra back end based on  <span>Win32CryptoKeyring, which stores a crypted version of the password in a file. Last, there&#8217;s another File-based crypted back end based on the PyCrypto lib.</span></p>
<p><span>The library is extensible and there&#8217;s an abstract base class that provides an interface you can use to write your own back end. Each back end has to return a &#8220;recommandation&#8221; value depending on the execution context (the platform, and anything the back end wants to check). 0 means the back end is not compatible, 1 means it will work, 2 means it&#8217;s recommended to use it. This allows us to pick the best back end automatically depending on the execution context.</span></p>
<p><span>Check the code here : </span><a href="http://bitbucket.org/kang/python-keyring-lib/" target="_blank">http://bitbucket.org/kang/python-keyring-lib/</a></p>
<p>Kang is tweaking the API names, modules names etc, and then will:</p>
<ul>
<li>add some documentation</li>
<li>write a patch for getpass.getpass</li>
<li>start a web page for the lib</li>
</ul>
<p>For the latter we are brainstorming on the project name before we release it.</p>
<p>I&#8217;ve asked on Twitter, here are some proposals so far (thanks guys!):</p>
<ul>
<li>@nightlybuild: <strong>Vercotti</strong> ? ( the recurring Sicilian connected gangster, played by Michael Palin &#8211; <a href="http://tiny.cc/luigi">http://tiny.cc/luigi</a></li>
<li>@pmclanahan: I like &#8220;<strong>Zoot</strong>&#8220;. From The Holy Grail, the name of the naughty sister in the perilous castle Anthrax.</li>
<li>@tpherndon: <strong>Bridge Keeper</strong> &#8211; &#8220;Answer me these questions three!&#8221;</li>
<li>@gurneyalex: you could consider <strong>creosote</strong> too</li>
<li>@jessenoller: Call it <strong>bucket</strong>. From meaning of life.</li>
<li>@regebro: &#8220;<strong>Biggles</strong>&#8220;. Because he chains an old woman to a wall. <a href="http://www.ibras.dk/montypython/episode15.htm" target="_blank">http://www.ibras.dk/montypython/episode15.htm</a></li>
<li>@gurneyalex: <strong>BrightSide</strong></li>
</ul>
<p>And you, what&#8217;s your proposal ?</p>
<p>Once the name is picked, we will start promoting the lib. I&#8217;ll work on distutils integration, and we will propose it to projects like Mercurial (it makes sense to allow the removal of those clear-text passwords from your hgrc when you are doing http auth).</p>
<p>Have I said it already ? being a GSoc mentor is a great experience, especially when you have the chance to pick students like Kang.</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/885/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/885/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/885/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/885/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/885/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/885/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/885/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/885/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/885/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/885/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=885&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/08/05/gsoc-keyring-project-post-midterm-quick-status/feed/</wfw:commentRss>
		<slash:comments>6</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>Words on : Distribute, Distutils, PEP 376, PEP 386, PEP 345</title>
		<link>http://tarekziade.wordpress.com/2009/07/24/words-on-distribute-distutils-pep-376-pep-386-pep-345/</link>
		<comments>http://tarekziade.wordpress.com/2009/07/24/words-on-distribute-distutils-pep-376-pep-386-pep-345/#comments</comments>
		<pubDate>Fri, 24 Jul 2009 22:56:05 +0000</pubDate>
		<dc:creator>Tarek Ziadé</dc:creator>
				<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://tarekziade.wordpress.com/?p=875</guid>
		<description><![CDATA[I am taking a break for a week starting tomorrow morning. My wife made it clear : my laptop and internet are totally forbidden during 7 days. So I thought it was a good opportunity to make a status of all the projects that are going on in the packaging world.
Distribute
The setuptools fork is doing [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=875&subd=tarekziade&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>I am taking a break for a week starting tomorrow morning. My wife made it clear : <strong>my laptop and internet are totally forbidden during 7 days</strong>. So I thought it was a good opportunity to make a status of all the projects that are going on in the packaging world.</p>
<h3><a href="http://www.flickr.com/photos/9009139@N08/1068561077/sizes/o/"><img class="alignright" title="Internet Addicted" src="http://farm2.static.flickr.com/1327/1068561077_dc14096ad3_o.gif" alt="" width="374" height="279" /></a>Distribute</h3>
<p>The setuptools fork is doing good. We&#8217;ve discussed the roadmap strategy with some people at Distutils-SIG and came up with that plan:</p>
<p><strong>0.6 will be released the first week of August</strong>. It will support Python 2.x only and will provide a bootstrap to replace an existing version of setuptools, as described in my <a href="http://tarekziade.wordpress.com/2009/07/22/preparing-to-release-distribute-0-6/" target="_blank">previous entry</a>.</p>
<p><strong>0.7 will support Python 2.x and 3.x</strong> and will refactor the code in three distributions. It will also rename all parts under new names, so they will not compete anymore with setuptools. Its development will start right after 0.6 is out. If you have ideas or feature requests, please add them in our <a href="http://bitbucket.org/tarek/distribute/issues/" target="_blank">issue tracker at bitbucket</a>.</p>
<h3>Distutils</h3>
<p>They are <a href="http://bugs.python.org/issue?@columns=title,id,activity,status&amp;@sort=-activity&amp;@group=priority&amp;@filter=components,status&amp;@pagesize=10&amp;@startwith=0&amp;status=1&amp;components=3&amp;@dispname=Distutils" target="_blank">some patches waiting</a> for my attention, I need to work on when I am back. But globally, if you open Distutils code, you will notice that it has been PEP8-fied (besides a few places I need to finishe) and test covered.</p>
<p>Some small refactorings have been done, like removing duplicate code and using the tar module of the stdlib instead of the tar command on the system, thus allowing building tar archive under win32 without having to install the tar program for example. Another nice change was done on the upload command: it uses urllib2 now, meaning that you can use an http proxy with a environment variable transparently. Other changes are on their way, like fixing the mess with &#8220;compiler&#8221; option, and cleaning up some remaining duplicate behaviors.</p>
<p>But nothing is deeply changing yet on how Distutils works. It waits for the PEPs we are working on to be accepted&#8230;</p>
<h3>PEP 376</h3>
<p>After I thaught this PEP was ready to be accepted, I sent it from Distutils-SIG to Python-dev. Then we had very long threads on Python-dev about it, showing that it was not ready at all&#8230;</p>
<p>Man, I don&#8217;t think I&#8217;ve picked the easiest topic <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Anyways, people gave a lot of thaught on the topic, and Paul Moore helped building a PEP 302-compatible version of the prototype, you can see at <a href="http://bitbucket.org/tarek/pep376/" target="_blank">bickbucket</a>. From there, we still need to fix the problem of the absolute/relative paths in the RECORD file, and try to have real world uses cases, with various package managers applications. But we will eventually have an acceptable PEP, I hope, within a few months.</p>
<p>This pep will add query APIs in pkgutils in the stdlib, so you know what&#8217;s installed in your Python. It will also provide tools to uninstall installed ditributions.</p>
<p>It&#8217;s a hot topic because we are dealing with the fuzzy boundary between <em>Python the extendable language</em>, where you can install distributions using distutils-based tools, and <em>Python the interpreter</em>, that gets extended with packages managed by an OS-based package manager like APT under Debian for example. So for the latter, all our tool are getting too much in the way and should not make it hard for system packagers to extract the metadata they need to re-package distutils-based distributions.</p>
<h3>PEP 386</h3>
<p>Man, this PEP would make our life easier. It&#8217;s all the work we started during Pycon, to find an <em>acceptable</em> way to compare versions. By acceptable I mean that could be used in our community <strong>and</strong> workable by OS packagers. I said I would drop it, because there were too much controversy, but quite a few people would like to see it accepted.</p>
<p>I doubt Guido will accept a PEP that would enforce a version scheme though.</p>
<p>I had created this PEP, so we could move forward on <strong>PEP 345</strong>, where we want to introduce &#8220;install_requires&#8221;, the field used in setuptools to list dependencies.</p>
<p>The prototype for PEP 386 is in bitbucket too : <a href="http://bitbucket.org/tarek/distutilsversion/" target="_blank">verlib</a></p>
<p>Whatever happens, I&#8217;ll probably publish it. Its useful to build a package system, and it has a function to translate most distutils/setuptools version schemes.</p>
<h3>Now about my addiction</h3>
<p>I know that sounds stupid, but I don&#8217;t know what is going to happen next week. It&#8217;s been years since I&#8217;ve not been fully offline for a week. I already have right now so many threads to catch up on various mailing lists that I am scared of how it&#8217;s going to be in 7 days&#8230;</p>
<p>But it&#8217;s probably a good thing for me to do this <img src='http://s.wordpress.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>I am off, see you in 7 days !</p>
  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/tarekziade.wordpress.com/875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/tarekziade.wordpress.com/875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/tarekziade.wordpress.com/875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/tarekziade.wordpress.com/875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/tarekziade.wordpress.com/875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/tarekziade.wordpress.com/875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/tarekziade.wordpress.com/875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/tarekziade.wordpress.com/875/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/tarekziade.wordpress.com/875/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/tarekziade.wordpress.com/875/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=tarekziade.wordpress.com&blog=448161&post=875&subd=tarekziade&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://tarekziade.wordpress.com/2009/07/24/words-on-distribute-distutils-pep-376-pep-386-pep-345/feed/</wfw:commentRss>
		<slash:comments>5</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://farm2.static.flickr.com/1327/1068561077_dc14096ad3_o.gif" medium="image">
			<media:title type="html">Internet Addicted</media:title>
		</media:content>
	</item>
	</channel>
</rss>