2014-10-28 210 views
1

在新鮮的Mac OS X上(嘗試Maverick和Yosemite),我得到pythons pip的奇怪結果。Pip安裝模塊到mac上的不同python安裝

我已在/ usr/local/bin/python中安裝了python的新版本,而原始版本的python仍然位於/ usr/bin/python。我的python安裝被設置爲默認值。

which python 
/usr/local/bin/python 

當安裝我的python模塊時,pip將所有依賴關係安裝到/usr/local/bin/python這是正確的。但是,它將/usr/bin/python的she-bang行添加到控制檯腳本中。

現在,當我使用我的控制檯腳本時,我得到一個導入錯誤,因爲在該版本的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

在使用pip進行安裝之前,您的控制檯腳本的shebang是什麼樣的? – ErlVolton 2014-10-28 19:45:28

+0

控制檯腳本不存在,然後用pip安裝它 – 2014-10-28 19:45:53

+0

我的意思是在你的源代碼中 – ErlVolton 2014-10-28 19:46:06

回答

0

編輯,使用有用的信息發表評論後進行更新。

根據你的評論,你正在使用的點是執行/usr/bin/python每個shebang線,所以這就是爲什麼setuptools用/usr/bin/python取代你的shebangs。您需要使用新的python安裝pip,每個版本的python都需要自己的pip。

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

但是,你應該真的use virtualenv代替。

+0

因此,你說她的爆炸線應該指向我想要的Python版本?如果不同計算機上的位置不同,該怎麼辦 – 2014-10-28 20:10:54

+0

它們指向的內容並不重要,它可以是'#!/ not/a/real/python'。只要它是以「python」結尾的shebang行,setuptools將會替換它(在安裝包期間)指向當前的python解釋器。 – ErlVolton 2014-10-28 20:11:51

+0

不工作,我嘗試添加'/ usr/bin/env python'(也試過'/ usr/local/bin/python'),當我安裝它時,腳本仍然指向'/ usr/bin/python' – 2014-10-28 20:57:21