将安装模块分配到mac上的不同python安装

时间:2014-10-28 19:43:03

标签: python macos pip

在新的Mac OS X上(尝试了Maverick和Yosemite),我从pythons pip得到了奇怪的结果。

我在/ 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中不存在依赖关系。

我可以通过编辑she-bang线来手动解决这个问题

#!/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

1 个答案:

答案 0 :(得分:0)

使用有用信息进行评论后进行编辑和更新。

根据你的评论,你正在使用的点子是按照它的shebang行执行/usr/bin/python,所以这就是setuptools用/usr/bin/python替换你的shebang的原因。你需要使用你的新python安装pip,每个版本的python都需要自己的pip。

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

但是,您应该真的 use virtualenv