<br><br><div class="gmail_quote">On Sun, Feb 22, 2009 at 22:41, Aahz <span dir="ltr">&lt;<a href="mailto:aahz@pythoncraft.com">aahz@pythoncraft.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<div><div></div><div class="Wj3C7c">On Sun, Feb 22, 2009, Brett Cannon wrote:<br>
&gt; On Sat, Feb 21, 2009 at 20:12, Aahz &lt;<a href="mailto:aahz@pythoncraft.com">aahz@pythoncraft.com</a>&gt; wrote:<br>
&gt;&gt; On Sat, Feb 21, 2009, Brett Cannon wrote:<br>
&gt;&gt;&gt; On Sat, Feb 21, 2009 at 15:46, Aahz &lt;<a href="mailto:aahz@pythoncraft.com">aahz@pythoncraft.com</a>&gt; wrote:<br>
&gt;&gt;&gt;&gt; On Sat, Feb 21, 2009, Brett Cannon wrote:<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; I am seeing two approaches emerging. One is where pickle contains all<br>
&gt;&gt;&gt;&gt;&gt; Python code and then uses something like use_extension to make sure<br>
&gt;&gt;&gt;&gt;&gt; the original Python objects are still reachable at some point. This<br>
&gt;&gt;&gt;&gt;&gt; has the drawback that you have to use some function to make the<br>
&gt;&gt;&gt;&gt;&gt; extensions happen and there is some extra object storage.<br>
&gt;&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt;&gt; The other approach is having pickle contain code known not to<br>
&gt;&gt;&gt;&gt;&gt; be overridden by anyone, import _pypickle for stuff that may be<br>
&gt;&gt;&gt;&gt;&gt; overridden, and then import _pickle for whatever is available. This<br>
&gt;&gt;&gt;&gt;&gt; approach has the perk of using a standard practice for how to pull in<br>
&gt;&gt;&gt;&gt;&gt; different implementation. But the drawback, thanks to how globals are<br>
&gt;&gt;&gt;&gt;&gt; bound, is that any code pulled in from _pickle/_pypickle will not be<br>
&gt;&gt;&gt;&gt;&gt; able to call into other optimized code; it&#39;s a take or leave it once<br>
&gt;&gt;&gt;&gt;&gt; the call chain enters one of those modules as they will always call<br>
&gt;&gt;&gt;&gt;&gt; the implementations in the module they originate from.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; To what extent do we care about being able to select Python-only on a<br>
&gt;&gt;&gt;&gt; per-module basis, particularly in the face of threaded imports? &nbsp;That<br>
&gt;&gt; is,<br>
&gt;&gt;&gt;&gt; we could have a sys.python_only attribute that gets checked on import.<br>
&gt;&gt;&gt;&gt; That&#39;s simple and direct, and even allows per-module switching if the<br>
&gt;&gt;&gt;&gt; application really cares and import doesn&#39;t need to worry about threads.<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Alternatively, sys.python_only could be a set, but that gets ugly about<br>
&gt;&gt;&gt;&gt; setting from the application. &nbsp;(The module checks to see whether it&#39;s<br>
&gt;&gt;&gt;&gt; listed in sys.python_only.)<br>
&gt;&gt;&gt;&gt;<br>
&gt;&gt;&gt;&gt; Maybe we should move this discussion to python-ideas for now to kick<br>
&gt;&gt;&gt;&gt; around really oddball suggestions?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; This is all about testing. If a change is made to some extension code it<br>
&gt;&gt;&gt; should be mirrored in the Python code and vice-versa.<br>
&gt;&gt;<br>
&gt;&gt; Okay, I don&#39;t see how that is a response to my suggestion -- I can<br>
&gt;&gt; imagine that someone might want to test a combination of pure-Python and<br>
&gt;&gt; binary libraries.<br>
&gt;<br>
&gt; I don&#39;t want to move it because this isn&#39;t some idea for a new feature that<br>
&gt; may or may not be useful; this isn&#39;t an &quot;idea&quot;, it&#39;s needed.<br>
<br>
</div></div>That&#39;s fine, but what about my idea of using sys.python_only?</blockquote><div><br>But what is it supposed to represent? That only pure Python modules get imported? What if the module depends on another module that is an extension module?<br>
<br>-Brett <br></div></div><br>