在另一个包中隐藏导入 python
Hide imports within another package python
问题
我经常使用 Jupyter,在使用 jupyter 时我有相同的导入列表,这些导入列表又长又麻烦,例如:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.core.display import display, HTML
from ipywidgets import interact, IntSlider
from IPython.display import display
pd.options.display.max_columns = 35
pd.options.display.max_rows = 300
plt.rcParams['figure.figsize'] = [12, 8]
plt.rcParams['figure.dpi'] = 170 # 200 e.g. is really fine, but slower
import IPython.display as ipd
plt.ion()
display(HTML("<style>.container { width:95% !important; }</style>"))
def plot_frozen(df, num_rows=30, num_columns=30, step_rows=1,
step_columns=1):
"""
Freeze the headers (column and index names) of a Pandas DataFrame. A widget
enables to slide through the rows and columns.
Parameters
----------
df : Pandas DataFrame
DataFrame to display
num_rows : int, optional
Number of rows to display
num_columns : int, optional
Number of columns to display
step_rows : int, optional
Step in the rows
step_columns : int, optional
Step in the columns
Returns
-------
Displays the DataFrame with the widget
"""
@interact(last_row=IntSlider(min=min(num_rows, df.shape[0]),
max=df.shape[0],
step=step_rows,
description='rows',
readout=False,
disabled=False,
continuous_update=True,
orientation='horizontal',
slider_color='purple'),
last_column=IntSlider(min=min(num_columns, df.shape[1]),
max=df.shape[1],
step=step_columns,
description='columns',
readout=False,
disabled=False,
continuous_update=True,
orientation='horizontal',
slider_color='purple'))
def _freeze_header(last_row, last_column):
display(df.iloc[max(0, last_row-num_rows):last_row,
max(0, last_column-num_columns):last_column])
它是导入和一堆 plotting/display 辅助函数。
有没有办法让我将所有这些捆绑到一个 pip
包中,这样我就只能有一两行?
我在想象 运行宁:
pip install Genesis
然后在我的 jupyter notebook 里面有:
import Genesis
仅此而已。
我尝试过的:
我尝试制作一个创世包,它基本上是 this guide 的副本,但有一个名为 jupyter.py
的文件,其中包含上面的设置代码。
然后我运行以下:
from Genesis import jupyter
jupyter.setup()
但它不会为我导入 pandas
、numpy
和 matplotlib.pyplot
。这是有道理的,因为这些包是在包的范围内导入的。但是有什么办法可以避免呢?在 Python 中甚至可能吗?
你可以用你所有的导入来制作一个包没问题,你只需要注意命名空间。
假设我有一个文件:
# genesis/__init__.py
import pandas as pd
import numpy as np
...
导入该创世包将运行该代码,但无法直接访问
>>> import genesis
>>> help(np)
raceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined
>>> help(genesis.np) # This should succeed
...
您可以使用 from genesis import *
解决此问题,这会将所有内容带入您期望的名称空间
例如
>>> from genesis import *
>>> help(np) # This should succeed
...
问题
我经常使用 Jupyter,在使用 jupyter 时我有相同的导入列表,这些导入列表又长又麻烦,例如:
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from IPython.core.display import display, HTML
from ipywidgets import interact, IntSlider
from IPython.display import display
pd.options.display.max_columns = 35
pd.options.display.max_rows = 300
plt.rcParams['figure.figsize'] = [12, 8]
plt.rcParams['figure.dpi'] = 170 # 200 e.g. is really fine, but slower
import IPython.display as ipd
plt.ion()
display(HTML("<style>.container { width:95% !important; }</style>"))
def plot_frozen(df, num_rows=30, num_columns=30, step_rows=1,
step_columns=1):
"""
Freeze the headers (column and index names) of a Pandas DataFrame. A widget
enables to slide through the rows and columns.
Parameters
----------
df : Pandas DataFrame
DataFrame to display
num_rows : int, optional
Number of rows to display
num_columns : int, optional
Number of columns to display
step_rows : int, optional
Step in the rows
step_columns : int, optional
Step in the columns
Returns
-------
Displays the DataFrame with the widget
"""
@interact(last_row=IntSlider(min=min(num_rows, df.shape[0]),
max=df.shape[0],
step=step_rows,
description='rows',
readout=False,
disabled=False,
continuous_update=True,
orientation='horizontal',
slider_color='purple'),
last_column=IntSlider(min=min(num_columns, df.shape[1]),
max=df.shape[1],
step=step_columns,
description='columns',
readout=False,
disabled=False,
continuous_update=True,
orientation='horizontal',
slider_color='purple'))
def _freeze_header(last_row, last_column):
display(df.iloc[max(0, last_row-num_rows):last_row,
max(0, last_column-num_columns):last_column])
它是导入和一堆 plotting/display 辅助函数。
有没有办法让我将所有这些捆绑到一个 pip
包中,这样我就只能有一两行?
我在想象 运行宁:
pip install Genesis
然后在我的 jupyter notebook 里面有:
import Genesis
仅此而已。
我尝试过的:
我尝试制作一个创世包,它基本上是 this guide 的副本,但有一个名为 jupyter.py
的文件,其中包含上面的设置代码。
然后我运行以下:
from Genesis import jupyter
jupyter.setup()
但它不会为我导入 pandas
、numpy
和 matplotlib.pyplot
。这是有道理的,因为这些包是在包的范围内导入的。但是有什么办法可以避免呢?在 Python 中甚至可能吗?
你可以用你所有的导入来制作一个包没问题,你只需要注意命名空间。
假设我有一个文件:
# genesis/__init__.py
import pandas as pd
import numpy as np
...
导入该创世包将运行该代码,但无法直接访问
>>> import genesis
>>> help(np)
raceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'np' is not defined
>>> help(genesis.np) # This should succeed
...
您可以使用 from genesis import *
解决此问题,这会将所有内容带入您期望的名称空间
例如
>>> from genesis import *
>>> help(np) # This should succeed
...