簡體   English   中英

在Mac上將安裝模塊安裝到不同的python安裝中

[英]Pip installing module to different python installations on mac

在新的Mac OS X(同時嘗試了Maverick和Yosemite)上,我從python 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

編輯,評論后更新有用的信息。

根據您的評論,您正在使用的pip在其shebang行上執行/usr/bin/python ,因此這就是setuptools用/usr/bin/python替換您的shebang的原因。 您需要使用新的python安裝pip,每個python版本都需要自己的pip。

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

但是,您實際上應該使用virtualenv代替。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM