Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/347.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在setup.py中检测pip_Python_Pip_Easy Install - Fatal编程技术网

Python 在setup.py中检测pip

Python 在setup.py中检测pip,python,pip,easy-install,Python,Pip,Easy Install,要点:在setup.py中检测到pip安装包触发我们的最佳方法是什么 背景: 我有一个包(C库的绑定),我为它提供了包含库本身的鸡蛋。在我的自述文件/文档中,我注意到该软件包在某些平台上“易于安装”。从源代码构建时(例如使用pip),库本身是一个构建依赖项。问题是,我经常让一些用户感到困惑,他们错误地认为pip是easy_install的完全替代品,并期望pip install package在没有库的系统上工作,甚至没有编译器,而egg才是他们真正想要的 我想检测构建是由pip触发的,因此如果

要点:在setup.py中检测到pip安装包触发我们的最佳方法是什么

背景: 我有一个包(C库的绑定),我为它提供了包含库本身的鸡蛋。在我的自述文件/文档中,我注意到该软件包在某些平台上“易于安装”。从源代码构建时(例如使用pip),库本身是一个构建依赖项。问题是,我经常让一些用户感到困惑,他们错误地认为pip是easy_install的完全替代品,并期望
pip install package
在没有库的系统上工作,甚至没有编译器,而egg才是他们真正想要的

我想检测构建是由pip触发的,因此如果由于缺少库而失败,我可以提供一条友好的“pip!=easy_install”消息。它不需要是完美的,只需要捕获
pip安装包的最常见情况即可。在检查中,似乎没有一种特别可靠的方法来做到这一点,我想到的最好的方法是:

probably_using_pip = '--single-version-externally-managed' in sys.argv

有没有更好的(或者更好的,官方的)方法来检测setup.py中的pip?

您是否可以尝试使用子进程/os来尝试运行pip,如果失败,您就知道没有pip。

\u文件
在setup中,如果从pip运行,会给出类似于
/tmp/pip-DNpsLw build/setup.py的东西

from setuptools import setup

def determineInstaller():
    if 'pip' in __file__:
        print('========pip triggered build========') #add smiley for friendliness :)
    return 'dummy description'

setup(name='bla',
      version='0.0',
      description=determineInstaller(),
      )

您是否考虑过构建pip可以安装的系统?

但如果没有,那就没有任何意义。知道pip的存在并没有帮助,因为我正在寻找它是否在实际使用中。另外,一个更容易检查pip是否存在的方法是导入pip。这是另一个非常好的注意事项,尽管我想更具体地减少误报,例如:
使用_pip=os.path.basename(os.path.dirname(_________文件)).startswith('pip-')
。鉴于没有人提供文档化或官方的答案,并且不易受到误报和/或私人API更改的影响,pip作者似乎无意让软件包知道pip正在使用。
\uuuuu file\uuuuu
解决方案似乎不适用于Py 2.7 2014-10-27,
文件中没有“pip”
os.environ
有一个带有值“/run/shm/r/ven/bin/pip”的键“u”。这是通过
pip安装-e安装的-U
,因此可能
\uuuu文件
解决方案适用于更典型的pip安装,但可能
\uu
键更通用?为什么错误消息需要与库不存在时运行“setup.py install”时有任何不同?当运行
setup.py install
时,您肯定是从源代码构建的。当您运行
pip安装时
人们可能期望得到二进制文件,但没有得到它们(用户确实不理解pip和easy\u install之间的区别)。这个问题与我的具体情况无关,因为pip 1.5默认支持wheels。更多上下文:在提出问题时(两年前),我的软件包经常安装在没有编译器的机器上,而pip不支持二进制格式。easy_安装工作得很好,但pip将无法编译。正因为如此,我想告诉那些
pip安装失败的人,easy\u安装可能更可取。我现在确实在制作轮子。当我问这个问题时,轮子并不存在。