jupyter notebook: NameError: name 'c' is not defined

Posted

技术标签:

【中文标题】jupyter notebook: NameError: name \'c\' is not defined【英文标题】:jupyter notebook: NameError: name 'c' is not definedjupyter notebook: NameError: name 'c' is not defined 【发布时间】:2021-10-21 09:09:22 【问题描述】:

每次我尝试启动我的笔记本时,我都会收到以下错误。 让我们指定我是该项目的新员工,并且在我加入团队之前创建了文件 config.py。

请问有人知道怎么解决吗?

实际完成的代码是

Requirements.txt

psycopg2==2.7.3.2.  
SQLAlchemy==1.2.2
pandas==0.21.0
docker==3.3.0
python-json-logger
sshtunnel==0.1.4
jupyter
jupytext==1.2
geopy==2.2.0

错误详情

~/SG/notebooks/config.py in <module>
1 # Using jupytext
----> 2 c.NotebookApp.contents_manager_class = "jupytext.TextFileContentsManager"
3 c.ContentsManager.default_jupytext_formats = "ipynb,py"

NameError: name 'c' is not defined

代码

笔记本中导致错误的行是

  from src.util.connect_postgres import postgres_connexion

文件connect_postgres的内容

 from sqlalchemy import create_engine
 from config.util.database import TARGET_TEST_HOST, TARGET_PROD_HOST, \
 TARGET_TEST_DB, TARGET_PROD_DB, TARGET_TEST_USER, TARGET_PROD_USER, SG_PROD_USER, SG_PROD_HOST
 from config.secrets.passwords import TARGET_PROD_PWD, TARGET_TEST_PWD, SG_PROD_PWD
 from sshtunnel import SSHTunnelForwarder
 import psycopg2

 def _create_engine_psg(user, db, host, port, pwd):
 """ Returns a connection object to PostgreSQL """
 url = build_postgres_url(db, host, port, pwd, user)
 return create_engine(url, client_encoding='utf8')
 def build_postgres_url(db, host, port, pwd, user):
 url = 'postgresql://:@:/'.format(user, pwd, host, port, db)
 return url
 def postgres_connexion(env):
  if env == 'prod':
  return create_engine_psg_with_tunnel_ssh(TARGET_PROD_DB, 
  TARGET_PROD_USER, TARGET_PROD_PWD, SG_PROD_PWD,
                                         SG_PROD_USER, 
   SG_PROD_HOST, TARGET_PROD_HOST)
  else:
    raise ValueError("'env' parameter must be 'prod'.")

config.py

  c.NotebookApp.contents_manager_class = "jupytext.TextFileContentsManager"
  c.ContentsManager.default_jupytext_formats = "ipynb,py"

我红色表示我可以生成文件然后对其进行编辑。

当我尝试创建 jupyter_notebook_config 时,它始终位于我的个人 marczhr 目录中

  /Users/marczhr/.jupyter/jupyter_notebook_config.py 

但我想完成一些我可以在 git 上推动的事情。

希望我清楚^^

谢谢,

【问题讨论】:

您帖子中的许多代码 sn-ps 并不能真正帮助回答问题。这里唯一重要的是config.py,其中c 被定义/实例化。如果您可以发布您的config.py,那对我们来说会更容易合作。 config.py 已经存在于我的原始帖子中。比你^^ @onlyphantom 你是如何启动笔记本的? “但我想完成一些我可以在 git 上推送的事情。”:我建议不要这样做:在这种情况下,配置文件是系统或用户特定的,而不是项目特定的。如果有一些配置应该应用于项目,您应该找到另一种类型的配置文件,或者更好的是,以编程方式将其添加到相关代码中。 从以上所有情况来看,项目/团队似乎真的需要让一个了解他们的 Python 知识并让项目恢复最新的人加入。这将比在互联网上尝试和询问要好得多,因为人们对项目的了解有限。 【参考方案1】:

不要从配置文件所在的目录运行笔记本。

原因是在列出的代码中有一个带有配置模块或包的导入。通过从包含配置文件的目录启动笔记本,它将导入该 Jupyter 配置文件,而不是正确的包或模块,从而导致错误。

相反,从其他地方运行它,或者将配置文件放在其他地方。

或者最好的方法是将两个配置行添加到 /Users/marczhr/.jupyter/jupyter_notebook_config.py 文件的末尾,然后删除 config.py 文件的 2-3 行。

在后一种情况下,您现在可以从任何地方启动笔记本服务器,并且您无需指定任何配置文件,因为 Jupyter 将自动使用生成的(带有添加行)的文件。

如果您想保留config.py 文件,则从另一个目录启动 Jupyter 笔记本服务器,并简单地指定完整路径,例如

jupyter --config=$HOME/SG/notebooks/config.py

总而言之,这是导入时的经典名称冲突,因为文件/目录名称相同。始终保持警惕。

(我已经评论了 cmets 中的一些其他潜在问题:仍然存在,但与这里的当前问题无关。)

【讨论】:

感谢您的帮助@9769953 对不起,我离线了!它真的很有用。最后一个问题:如果我决定保留 config.py 文件,因为它实际上是我从我的 SG 目录执行的命令 jupyter notebook --config="Users/marczhr/SG/notebooks/config.py" 我也得到了同样的错误。我做错了吗? 嗯。那么,cd ~/SG ; jupyter notebook --config="Users/marczhr/SG/notebooks/config.py" 给出同样的错误?你的 PYTHONPATH 是什么?例如,echo $PYTHONPATH. 它什么也没提供 我认为这里没有 $PYTHONPATH 什么什么都没有? jupyter 命令,还是echo 命令?

以上是关于jupyter notebook: NameError: name 'c' is not defined的主要内容,如果未能解决你的问题,请参考以下文章

如何修改jupyter notebook的默认工作路径

jupyter notebook怎么加环境变量

Jupyter Notebook——如何显示目录的导航栏(安装 Jupyter Notebook extension)

jupyter notebook 启动不起来

jupyter notebook 找不到命令

81. jupyter notebook设置无密码