当我在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
这源于argparse
和standard library中的argparse
。
就我而言,要安装module from PyPI包stevedore argparse
模块。在装卸工的开发网站上有required关于unsettled discussion对Python 2.6的这个要求(它没有内置argparse
),但是装卸工具是举个例子:许多软件包需要argparse
,有些软件包甚至需要比标准库中捆绑的版本更高的版本。 (例如,在撰写本文时,constraining需要remotecv
。)
假设您确实想继续使用第三方软件包,那么处理此警告的最恐怖的方式是什么?
argparse>=1.2.1,<1.3.0
?argparse
模块?.egg
?在“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)。
答案 0 :(得分:0)
我对以前安装的argparse
版本无法提供帮助,但可能无法提供有用的观察结果。
ipython
是argparse
的重度用户,虽然以自己的方式。它从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
个单元测试文件。它们可用于测试兼容性。