<p>我不确定我是否理解你在做什么和你想要的结果,但也许这会有帮助。由于C扩展模块通常在Python解释器的执行上下文中运行,因此必须构建与解释器兼容的扩展模块。在OS X上,Python和distutils在确保C扩展模块使用与Python解释器本身最初构建时相同的SDK(<code>-sysroot</code>)、<code>MACOSX_DEPLOYMENT_TARGET</code>值和<code>-arch</code>值时会遇到一些麻烦。因此,如果您在10.6上使用Apple提供的Python,distutils将提供<code>-arch i386 -arch ppc -arch x86_64</code>,这是用它构建的三个arch。如果使用当前的python.org OS X安装程序(在10.6、10.5或10.4上),它将使用:</p>
<pre><code>gcc-4.0 -arch ppc -arch i386 -isysroot /Developer/SDKs/MacOSX10.4u.sdk
</code></pre>
<p>从您提供的代码片段来看,我猜您使用的是安装了通用Python的MacPorts,默认情况下,它是使用<code>-arch x86_64 -arch i386 -isysroot /</code>构建扩展模块的。</p>
<p>一般来说,要使一切正常工作,您需要确保:</p>
<ol>
<li><p>中至少有一个<code>arch</code>
在口译员中很常见
扩展模块和所有外部
框架和/或共享库
它们链接到</p></li>
<li><p>解释器在那个(或其中一个)公共体系结构中执行。</p></li>
</ol>
<p>在OSX10.6上,最后一步并不那么简单,这取决于您使用的是哪种Python。例如,Apple提供的Python2.6修改了强制32位执行(有关详细信息,请参见Apple的<code>man python</code>):</p>
<pre><code>export VERSIONER_PYTHON_PREFER_32_BIT=yes
</code></pre>
<p>如果您构建自己的32/64位通用Python,那么2.6.5中有一些修正,允许在运行时进行选择。不幸的是,MacPorts构建Python的方法绕过了这些修复,因此似乎没有任何简单的方法强制MacPorts python2.6在10.6上运行32位/64位通用构建,使其以32位模式运行。由于复杂的原因,即使您使用<code>/usr/bin/arch -i386</code>,它也总是喜欢64位(如果可用)。</p>
<p>因此,取决于你想做什么,你可以通过以下任一方法来解决这个问题(如果我理解正确的话):</p>
<ol>
<li>重新构建框架以包含<code>-arch x86_64</code></li>
<li>在32位模式下使用Apple提供的Python(<code>/usr/bin/python</code>)或Python.org 2.6.5</li>
<li><p>以32位模式重新安装MacPorts python(未测试!)以下内容:</p>
<pre><code>sudo port selfupdate
sudo port clean python26
sudo port install python26 +universal universal_archs=i386
</code></pre></li>
</ol>