不,没有,按设计。如果你想在导入子模块时避免太多开销,你只需使用空__init__.py
s 来定义包。这样导入包的开销几乎为零。
If pandas
does not做你有的事no导入方式pandas.io.clipboard
无需导入pandas
and io
第一的。你什么can做,但是这是一个巨大的hack它是not等价的是导入clipboard
模块作为普通模块而不是作为子模块。您只需找到所在的位置即可pandas
已安装(例如/usr/lib/pythonX.Y/dist-packages/
)并将父包的路径插入到sys.path
(/usr/lib/pythonX.Y/dist-packages/pandas/io
在你的情况下)。然后你可以导入clipboard
通过执行以下操作进行打包:
import clipboard
但请注意:
import clipboard
from pandas.io import clipboard as clipboard2
print(clipboard == clipboard2)
会打印False
。事实上,这样做可能会破坏很多代码,因为您从根本上破坏了一些不变量import
机制假设。
特别是如果子模块does使用相对导入引用其他子模块导入将会失败,并且在其他情况下它不会正确运行。另一个失败的例子是如果您必须处理腌制的对象。如果您使用导入的模块腌制了一些对象pandas.io.clipboard
你会not能够使用该模块来取消它们clipboard
如上所述导入。
总之,don't!我建议:
- 如果导入包所花费的时间不是很长,请忍受它real issue.
- 或者:尝试寻找替代品。如果你只需要
pandas.io.clipboard
但不是其余的pandas
也许你不应该使用pandas
首先,您应该使用仅实现以下功能的较小包clipboard
.
如果你看pandas.util.clipboard源代码 https://github.com/pandas-dev/pandas/blob/master/pandas/io/clipboard/__init__.py你发现它实际上只是pyperclip https://github.com/asweigart/pyperclip模块版本 1.7。您只需将此模块添加到您的site-packages
并使用它来代替提供的pandas
。事实上pandas
团队仅在源代码末尾添加了以下片段:
## pandas aliases
clipboard_get = paste
clipboard_set = copy
扩展一下关于whypython import 就是这样工作的。
正如你在Python中所知道的模块是对象。而且也有这样的情况包是模块,尽管并非每个模块都是包。当您导入包时,如下所示:
import pandas.io.clipboard
Python 必须:
- 创建
module
实例pandas
- 创建
module
实例io
并将其添加为属性pandas
- 创建
module
实例clipboard
并将其添加为属性io
.
为了创建一个module
实例Python必须执行代码在模块中。
形式的导入:
from pandas.io import clipboard
只是语法糖:
import pandas.io.clipboard
clipboard = pandas.io.clipboard
del pandas.io
请注意,在from
case clipboard
可以是module
/package 或者只是内部定义的东西io
。为了检查这一点,口译员must还导入io
并做到这一点must还导入pandas
.