如何修复ipykernel_launcher.py:错误:jupyter中无法识别的参数?

时间:2018-02-14 21:03:46

标签: python python-3.x tensorflow jupyter-notebook jupyter

我在设置环境两天后跟踪此张量流tutorial我终于可以使用cmd运行premade_estimator.py

但是当我尝试在jupyter笔记本中运行相同的代码时,我收到此错误:

usage: ipykernel_launcher.py [-h] [--batch_size BATCH_SIZE]
                             [--train_steps TRAIN_STEPS]

ipykernel_launcher.py: error: unrecognized arguments: -f C:\Users\david\AppData\Roaming\jupyter\runtime\kernel-4faecb24-6e87-40b4-bf15-5d24520d7130.json
     

发生了异常,使用%tb查看完整的回溯。

SystemExit: 2

C:\Anaconda3\envs\python3x\lib\site-packages\IPython\core\interactiveshell.py:2918: 
UserWarning: To exit: use 'exit', 'quit', or Ctrl-D. warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

我尝试使用以下方法修复它:

pip install --ignore-installed --upgrade jupyter

pip install ipykernel
python -m ipykernel install

conda install notebook ipykernel
ipython kernelspec install-self

任何想法都会欣赏!谢谢!

6 个答案:

答案 0 :(得分:12)

我明白了!我们得到错误的原因是因为此代码使用argparse并且此模块用于编写用户友好的命令行界面,所以看起来它与Jupyter Notebook有冲突。

我在page中找到了解决方案:

我们要做的是:

删除或评论这些行:

parser = argparse.ArgumentParser()
parser.add_argument('--batch_size', default=100, type=int, help='batch size')
parser.add_argument('--train_steps', default=1000, type=int,
                    help='number of training steps')

并替换args

args = parser.parse_args(argv[1:])

以这种方式使用库easydict的字典:

args = easydict.EasyDict({
    "batch_size": 100,
    "train_steps": 1000
})

使用easydict,我们可以访问dict值作为参数的属性。

<强>更新

在今年全面深入了解python后,我发现这个问题的解决方案更简单(我们不需要使用任何外部库或方法)。 argparse只是从终端向python中的脚本传递参数的众多方法之一。当我试图在一个jupyter笔记本中做这件事显然不会起作用。我们可以直接在函数中替换像:

这样的参数
funtion(batch_size=100, train_steps=1000)

现在,如果我们的函数有很长的参数列表,我们可以使用*args**kargs

*args将一个元组作为参数传递给函数,对于这种情况,特别是它将是:

args = (100, 1000)
function(*args)

**kargs将字典作为参数传递给我们的函数:

args = {"batch_size": 100,
        "train_steps": 1000}
function(**args)

只是谷歌它,你会发现一个非常好的解释,如何使用它们,这里我曾经研究过一个documentation

答案 1 :(得分:4)

一个更优雅的解决方案是:

args = parser.parse_known_args()[0]

代替

args = parser.parse_args()

答案 2 :(得分:1)

你试过了吗?

conda install ipykernel --name Python3
python -m ipykernel install

答案 3 :(得分:0)

我今天才遇到这个问题,发现一个快速,愚蠢的解决方案是为qtconsole / ipython传递的-f参数插入一个参数处理器,这是我们没有想到的。在parser.add_argument的结尾处,我输入:

parser.add_argument("-f", "--fff", help="a dummy argument to fool ipython", default="1")

我不使用-f参数,所以对我来说没有损失。

我不想仅仅因为一台特定计算机上的工作流中出现了ipython而重新设计一个更大的参数处理框架...

答案 4 :(得分:0)

我遇到了这个问题:

from serial.tools.list_ports import main
main()

但这是来自串行导入的库

所以我在以下目录中复制了文件: /usr/lib/python3/dist-packages/serial/tools

并编辑以添加:

parser.add_argument("-f", "--fff", help="a dummy argument to fool ipython", default="1")

就像 pauljohn32 https://stackoverflow.com/users/1086346/pauljohn32)一样!

现在在本地使用新文件:

from list_ports import main
main()

工作正常!

答案 5 :(得分:0)

我收到了更多“无法识别的参数”的错误: ipykernel_launcher: error: unrecognized arguments: --ip=127.0.0.1 --stdin=9008 --control=9006 --hb=9005 --Session.signature_scheme="hmac-sha256" --Session.key=b"2dd531d9" --shell=9007 --transport="tcp" --iopub=9009 --f=tmp-18240vZXCSGIbxxcJ.json An exception has occurred, use %tb to see the full traceback.

对于每个无法识别的参数(即 ip、stdin、control 等),我添加了一行以将参数添加到我的 ArgParser(如@pauljohn32 所建议):

        ap.add_argument(
            "-i", "--ip", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-s", "--stdin", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-c", "--control", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-b", "--hb", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-K", "--Session.key", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-S", "--Session.signature_scheme", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-l", "--shell", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-t", "--transport", help="a dummy argument to fool ipython", default="1")
        ap.add_argument(
            "-o", "--iopub", help="a dummy argument to fool ipython", default="1")