2014-10-28 4 views
1

На новой Mac OS X (как и Maverick, так и Yosemite) я получаю странные результаты от pythons pip.Установка модуля для установки python на Mac

Я установил новую версию python в/usr/local/bin/python, а исходная версия python все еще живет в/usr/bin/python. Моя установка python установлена ​​по умолчанию.

which python 
/usr/local/bin/python 

При установке моего питона модуль, Пип устанавливает всю зависимость для /usr/local/bin/python которых является правильным. Тем не менее, он добавляет строку she-bang от /usr/bin/python к консольным скриптам.

Теперь, когда я использую свой консольный скрипт, я получаю ошибку импорта, потому что зависимостей не существует в этой версии python.

я могу исправить это вручную, отредактировав она Взрывы линии

#!/usr/local/bin/python 

и все прекрасно.

Итак, вот мой вопрос. Почему это происходит? Почему pip устанавливает все зависимости к одной версии и использует she-bang из другой версии?

Более важный вопрос, как я могу предотвратить это, поэтому любой, кто устанавливает мой модуль, не должен менять эту строку самостоятельно?


Вот мой setup.py:

import sys 

from setuptools import setup, find_packages 

import foobar 

requires = ['pyyaml==3.11', 
      'six==1.8.0', 
      'cement==2.4', 
      'setuptools>=7.0', 
      'python-dateutil>=2.2', 
      ] 

setup_options = dict(
    name='foobar', 
    version=foobar.__version__, 
    description='Command Line Interface.', 
    long_description=open('README.rst').read(), 
    author='Humdinger', 
    url='example.com', 
    packages=find_packages('.', exclude=['tests*', 'docs*']), 
    package_dir={'foobar': 'foobar'}, 
    install_requires=requires, 
    classifiers=(
     'Development Status :: 5 - Production/Stable', 
     'Intended Audience :: Developers', 
     'Intended Audience :: System Administrators', 
     'Natural Language :: English', 
     'Programming Language :: Python', 
     'Programming Language :: Python :: 2.7', 
     'Programming Language :: Python :: 3', 
     'Programming Language :: Python :: 3.3', 
     'Programming Language :: Python :: 3.4', 
    ), 
    entry_points={ 
     'console_scripts': [ 
      'foo=foobar.foo:main' 
     ] 
    } 
) 

setup(**setup_options) 

По предложению, я добавил строку

#!/usr/bin/env python 

на мой setup.py и foo.py файл.

Это не похоже на проблему.


Я также попытался перепробовать новую ОС Mac OSX без установки моей собственной версии python.

$ which python 
/Library/Frameworks/Python.framework/Versions/2.7/bin/python 

$ pip --version 
pip 1.5.6 from /Library/Python/2.7/site-packages/pip-1.5.6-py2.7.egg (python 2.7) 

$ head -1 $(which pip) 
#!/usr/bin/python 

$ head -1 $(which eb) 
#!/usr/bin/python 
+0

Как выглядит скрипка вашего консольного скрипта (ов) перед установкой с помощью пипа? – ErlVolton

+0

Консольный скрипт не существует до того, как я установил его с помощью пипа –

+0

Я имел в виду в вашем источнике – ErlVolton

ответ

0

Редактировать, обновить после комментариев с полезной информацией.

Основываясь на ваших комментариях, используемый вами пин выполняет /usr/bin/python за свою линию shebang, поэтому именно поэтому setuptools заменяет ваши shebangs на /usr/bin/python. Вам нужно установить pip с помощью вашего нового python, каждая версия python нуждается в собственном пипе.

/usr/local/bin/python get-pip.py 

Однако, вы должны действительноuse virtualenv вместо этого.

+0

Так что, ваше высказывание, строки she-bang должны указывать на версию python, которую я хочу? Что делать, если местоположение отличается на разных компьютерах? –

+0

Не имеет значения, на что они указывают, это может быть '#!/Not/a/real/python'. Пока это строка shebang, которая заканчивается на «python», setuptools заменит ее для вас (во время установки пакета), чтобы указать на текущий интерпретатор python. – ErlVolton

+0

Не работает, я попробовал добавить '/ usr/bin/env python' (Также пытался'/usr/local/bin/python'), и когда я его устанавливаю, сценарий по-прежнему указывает на '/ usr/bin/python' –

Смежные вопросы