Pip安装模块到mac上的不同python安装
在新鲜的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
编辑,使用有用的信息发表评论后进行更新。
根据你的评论,你正在使用的点是执行/usr/bin/python
每个shebang线,所以这就是为什么setuptools用/usr/bin/python
取代你的shebangs。您需要使用新的python安装pip,每个版本的python都需要自己的pip。
/usr/local/bin/python get-pip.py
但是,你应该真的use virtualenv代替。
因此,你说她的爆炸线应该指向我想要的Python版本?如果不同计算机上的位置不同,该怎么办 – 2014-10-28 20:10:54
它们指向的内容并不重要,它可以是'#!/ not/a/real/python'。只要它是以“python”结尾的shebang行,setuptools将会替换它(在安装包期间)指向当前的python解释器。 – ErlVolton 2014-10-28 20:11:51
不工作,我尝试添加'/ usr/bin/env python'(也试过'/ usr/local/bin/python'),当我安装它时,脚本仍然指向'/ usr/bin/python' – 2014-10-28 20:57:21
在使用pip进行安装之前,您的控制台脚本的shebang是什么样的? – ErlVolton 2014-10-28 19:45:28
控制台脚本不存在,然后用pip安装它 – 2014-10-28 19:45:53
我的意思是在你的源代码中 – ErlVolton 2014-10-28 19:46:06