【问题标题】:Pip installing module to different python installations on macpip 将模块安装到 mac 上的不同 python 安装
【发布时间】:2014-10-28 19:43:03
【问题描述】:

在新的 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 文件。

这似乎不能解决问题。


我还尝试在没有安装我自己的 python 版本的情况下在新的 mac OSX 上重试。

$ 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

【问题讨论】:

  • 在使用 pip 安装之前,控制台脚本的 shebang 是什么样的?
  • 在我使用 pip 安装之前,控制台脚本不存在
  • 我的意思是在你的来源
  • 正如我所说,she-bang 指向:/usr/bin/python
  • @m.wasowski 无论如何都会被 setuptools 取代

标签: python macos pip


【解决方案1】:

编辑,评论后更新有用的信息。

根据您的评论,您正在使用的 pip 在其 shebang 行中执行 /usr/bin/python,这就是 setuptools 将您的 shebangs 替换为 /usr/bin/python 的原因。您需要使用新的 python 安装 pip,每个版本的 python 都需要自己的 pip。

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

但是,您应该真的改为use virtualenv

【讨论】:

  • 所以你说的she-bang线应该指向我想要的python版本?如果不同计算机上的位置不同怎么办?
  • 不管他们指向什么,它可能是#!/not/a/real/python。只要它是以“python”结尾的 shebang 行,setuptools 就会为您替换它(在安装包期间)以指向当前的 python 解释器。
  • 不起作用,我尝试添加/usr/bin/env python(也尝试了/usr/local/bin/python),当我安装它时,脚本仍然指向/usr/bin/python
  • 你是加了/usr/bin/env python还是#!/usr/bin/env python
  • #!/usr/bin/env python
猜你喜欢
  • 1970-01-01
  • 2022-07-06
  • 2019-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 1970-01-01
  • 2015-10-11
相关资源
最近更新 更多