在标准库副本

时间:2015-12-18 16:35:40

标签: python python-2.7 argparse pypi

当我在Python 2.7中运行Module was already imported和其他各种程序时,我一直在深入研究ipython警告:

$ ipython
[path to python]/lib/python2.7/site-packages/path.py:122:
UserWarning: Module argparse was already imported from [path to python]/lib/python2.7/argparse.pyc, but 
[path to python]/lib/python2.7/site-packages is being added to sys.path
  import pkg_resources

这源于argparsestandard library中的argparse

就我而言,要安装module from PyPIstevedore argparse模块。在装卸工的开发网站上有required关于unsettled discussion对Python 2.6的这个要求(它没有内置argparse),但是装卸工具是举个例子:许多软件包需要argparse,有些软件包甚至需要比标准库中捆绑的版本更高的版本。 (例如,在撰写本文时,constraining需要remotecv。)

假设您确实想继续使用第三方软件包,那么处理此警告的最恐怖的方式是什么?

在“Suppress the warning”和“How do you correct Module already loaded UserWarnings in Python?”中也有类似的问题我会让明智的人群决定这是否重复,但我不相信它。那些都是在4年多前被问过,包裹分发工具已经改变了(这不是关于Module pytz was already imported.pip list),虽然警告是相同的,但我并没有这样做。认为它们是由这个重叠的stdlib / PyPI问题引起的。

向任何研究此问题的人致敬:argparse可能distribute undefined从其结果中exclude)。

1 个答案:

答案 0 :(得分:0)

我对以前安装的argparse版本无法提供帮助,但可能无法提供有用的观察结果。

ipythonargparse的重度用户,虽然以自己的方式。它从config文件构建解析器,并使用它来处理命令行。所以你的命令行有最后一刻机会覆盖许多comfig选项。

%magic命令的解析版本为argparse

PyPi版本的开发一旦成为标准就停止了(Python 2.7)。标准中的版本号无意义。它仍然是(在最新的Python 3.5中)。

In [4]: argparse.__version__
Out[4]: '1.1'

我不知道如何完成,但任何寻求安装argparse的模块都应首先检查Python版本。如果它是2.7或更新,它应该使用标准argparse

请记住,argparse模块是一个自包含文件argparse.py。根据我的经验,ipython可以在我当前的工作目录中使用该文件的副本。我在测试argparse bug /问题的补丁时一直这样做。

除了2.6兼容性之外,我无法想到一个包需要一个PyPi版本的argparse而不是标准版本的原因。是否有任何讨论表明可能会出现哪些不兼容性?

根据当前的PyPi版本(1.4)NEWS.txt,存储库现在是

https://github.com/ThomasWaldmann/argparse

可能正在探索那里以查看与标准版本之间存在哪些兼容性问题。

PyPi版本和标准库都有test_argparse.py个单元测试文件。它们可用于测试兼容性。