在 Jupyter Notebook 中锁定 Python 代码并使其作为命令可执行
Posted
技术标签:
【中文标题】在 Jupyter Notebook 中锁定 Python 代码并使其作为命令可执行【英文标题】:Lock Python code in Jupyter Notebook and make it executable as command 【发布时间】:2018-10-16 08:28:48 【问题描述】:我在 4 个不同的单元格中运行以下代码:
单元格1:
import pandas as pd
import numpy as np
import os
reference = pd.read_excel(argument1,sheet_name=argument2,na_values='0',converters='SID': ':0>12'.format) #reference file path
reference.replace('',np.nan,inplace=True)
reference.dropna(how='all',inplace = True)
reference.drop([0],inplace=True)
单元格2:
reference=reference[reference['SType']==argument']
单元格4:
path = argument4
file_list = os.listdir(path)
for i in file_list:
filename = os.path.join(path, i)
#ori_df = pd.read_excel(filename)
df = pd.read_excel(filename)
cond = pd.Index(df.iloc[0]).intersection(reference.columns)
df1 = reference[cond].copy()
#df1.loc[-1] = df1.columns
d = dict(zip(df.iloc[0], df.columns))
df1 = df1.sort_index().rename(columns=d)
x = df1.iloc[:,1:].columns
df1.dropna(axis=0,how='all',subset=x,inplace=True)
if len(cond) > 1:
df1.to_excel(filename,index = False)
else:
os.remove(filename)
我想知道有什么方法可以将此代码保存为 .py 文件并使其可执行,只需在 jupyter 单元格中传递参数(如命令行)即可。 Jupyter笔记本允许吗?如果是,请告诉我怎么做。
** 抱歉,如果我在这里无知,我尝试对此进行一些研究,但无法获得任何信息。
【问题讨论】:
【参考方案1】:只需使用 nbconvert --to script
选项。
jupyter-nbconvert --to script path/to/your/notebook.ipynb
您将无法使用命令行传递自定义参数,这需要进一步自定义生成的脚本。
Relevant documentation
将笔记本转换为可执行脚本。这是最简单的方法 获取 Python(或其他语言,取决于内核)脚本 出笔记本。如果 Jupyter 笔记本中有任何魔法, 这可能只能从 Jupyter 会话中执行。
【讨论】:
【参考方案2】:不久前我也有同样的问题^^
我不确定我的回答是否符合您的期望,但我是这样做的:
假设你的文件是这样的:
+
| my_notebook.ipynb
| + folder1
| | my_script.py
假设你在文件my_script.py
中有一个函数run_script()
那么你可以这样做:
import folder1.my_script as ms
ms.run_script()
为了能够将您的脚本作为包/模块调用,您需要在正确的位置创建空的__init__.py
文件。所以你的树应该是这样的:
+
| __init__.py
| my_notebook.ipynb
| + folder1
| | __init__.py
| | my_script.py
【讨论】:
以上是关于在 Jupyter Notebook 中锁定 Python 代码并使其作为命令可执行的主要内容,如果未能解决你的问题,请参考以下文章
Jupyter Notebook安装新python kernel