【发布时间】: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 取代