2011-12-20 25 views
0

我正在運行OS X Lion(在Leopard上啓動,並已經通過兩次升級)。 OS X Lion自帶Python 2.7。在某些時候,我認爲Python和它的軟件包一起工作(可能在我升級到Lion之前)。正確的權限Python和包OS X Lion

我可以作爲非超級用戶運行Python。但是,例如,當我導入軟件包或嘗試運行easy_install時,出現以下錯誤。

system:distutils $ python 
Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import zope 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/zope/__init__.py", line 1, in <module> 
    __import__('pkg_resources').declare_namespace(__name__) 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 698, in <module> 
    class Environment(object): 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 701, in Environment 
    def __init__(self, search_path=None, platform=get_supported_platform(), python=PY_MAJOR): 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 96, in get_supported_platform 
    plat = get_build_platform(); m = macosVersionString.match(plat) 
    File "build/bdist.linux-i686/egg/pkg_resources.py", line 222, in get_build_platform 
    plat = get_platform() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils/util.py", line 165, in get_platform 
    "Don't know machine value for archs=%r"%(archs,)) 
ValueError: Don't know machine value for archs=() 
>>> ^D 
system:distutils $ 

當我運行它作爲根或sudo,一切工作正常。所有的目錄和文件分別具有07550644權限。

OS X Lion上的Python及其軟件包的權限應該如何,以便您可以將其用作普通用戶?是我的權限目前配置爲默認的方式,還是我一直搞亂了權限。

我意識到我可以通過/ System/Library/...和/ Library/Python/...目錄並將所有權和權限更改爲我。但這似乎並不是正確的解決方案。

回答

0

經過一段時間的掙扎,並且反覆受挫,我找出了easy_install可能因此錯誤而失敗的兩個原因。

  1. 我需要安裝的XCode(這我已經做)
  2. 我只是通過代碼進去util.py找到產生錯誤的路線,並改變了結果。

這工作完美。我現在從未收到該錯誤。我已經把解決方案的差異放在下面。請注意,我選擇'intel'作爲machine類型,因爲在OS X Lion中,所有PPC支持均被刪除。

我希望這可以幫助別人。

wintermute:distutils $ pwd 
/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/distutils 
wintermute:distutils $ diff -U 5 util.py.bad util.py 
--- util.py.bad 2012-03-03 15:30:39.000000000 -0500 
+++ util.py 2012-03-03 15:32:21.000000000 -0500 
@@ -159,12 +159,13 @@ 
       elif archs == ('ppc64', 'x86_64'): 
        machine = 'fat64' 
       elif archs == ('i386', 'ppc', 'ppc64', 'x86_64'): 
        machine = 'universal' 
       else: 
-     raise ValueError(
-      "Don't know machine value for archs=%r"%(archs,)) 
+     machine = 'intel' 
+     #raise ValueError(
+     # "Don't know machine value for archs=%r"%(archs,)) 

      elif machine == 'i386': 
       # On OSX the machine type returned by uname is always the 
       # 32-bit variant, even if the executable architecture is 
       # the 64-bit variant 
wintermute:distutils $ 
0

有一些不尋常的關於你的Python安裝。在我的獅子(10.7.3)系統,蘋果提供的Python 2.7版有這個旗幟,是沒有問題的進口的Zope:

$ /usr/bin/python2.7 
Python 2.7.1 (r271:86832, Jul 31 2011, 19:30:53) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import zope 
>>> 

也許你已經安裝了獅子的主要部分的預發佈版本?

+0

我毫不懷疑你是對的。我有和你一樣的Python版本。我從雪豹升級。你有沒有乾淨的Lion安裝?我認爲之前可能有一個問題,我沒有安裝XCode。 – Brian 2012-03-04 14:40:32

+0

我有從SL升級的機器和Lion的乾淨安裝,據我所知,我從來沒有見過除2011年7月31日以外的版本日期的蘋果公司的'/ usr/bin/python2.7'。 – 2012-03-04 17:18:12

+0

我不知道爲什麼我的建造日期不是2011年7月31日,但很多其他人也有我的建造日期。我沒有使用預發佈版,並且正在運行Lion 10.7.3。我昨天也升級到最新版本的XCode。 – Brian 2012-03-04 21:48:21

0

對於任何人來這裏通過谷歌搜索的錯誤,這也可能這不是一個權限問題。相反,它可能發生是因爲Python用來確定(Apple)平臺的環境變量設置不正確。

相關標誌包括至少:

'CFLAGS', 'LDFLAGS', 'CPPFLAGS', 'BASECFLAGS', 'BLDSHARED', 'LDSHARED', 'CC', 'CXX', 'PY_CFLAGS', 'PY_LDFLAGS','PY_CPPFLAGS','PY_CORE_CFLAGS'

查看Python stdlib的_osx_support.py文件和特定的get_platform_osx函數;它在那裏。