Правильные разрешения для Python и пакетов на OS X Lion - PullRequest
0 голосов
/ 21 декабря 2011

Я использую OS X Lion (запущен на Leopard и прошел два обновления). OS X Lion поставляется с Python 2.7. В какой-то момент я подумал, что Python и его пакеты работают вместе (возможно, до моего обновления с 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 $

Когда я запускаю его как root или как sudo, все работает нормально. Все каталоги и файлы имеют разрешения 0755 или 0644 соответственно.

Какими должны быть разрешения для Python и его пакетов в OS X Lion, чтобы вы могли использовать его как обычный пользователь? Способ, которым мои разрешения в настоящее время настроены по умолчанию, или я испортил разрешения по пути.

Я понимаю, что могу пройти через каталоги / System / Library / ... и / Library / Python / ... и изменить владельца и разрешение для меня. Но это не кажется правильным решением.

Ответы [ 3 ]

0 голосов
/ 04 марта 2012

Есть что-то необычное в вашей настройке Python.На моих системах Lion (10.7.3), поставляемый Apple 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
>>>

Возможно, у вас установлена ​​предварительная версия частей Lion?

0 голосов
/ 26 ноября 2013

Для любого, кто приходит сюда через поиск в Google по ошибке, также возможно, что это не проблема с разрешениями.Скорее, это может произойти из-за того, что переменные среды, используемые Python для определения платформы (Apple), установлены неправильно.

Соответствующие флаги включают как минимум:

'CFLAGS', 'LDFLAGS', 'CPPFLAGS ',' BASECFLAGS ',' BLDSHARED ',' LDSHARED ',' CC ',' CXX ',' PY_CFLAGS ',' PY_LDFLAGS ',' PY_CPPFLAGS ',' PY_CORE_CFLAGS '* 100x *.py-файл Python stdlib и, в частности, функция get_platform_osx;это все там.

0 голосов
/ 04 марта 2012

Поработав некоторое время и неоднократно разочаровываясь, я обнаружил две причины, по которым 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 $ 
...