如何构建像 pandas/numpy 这样的包,其中 pd/np 是一个具有所有功能的 object

How to build package like pandas/numpy where pd/np is an object with all the functions

根据标题,我正在尝试自己构建一个 python 包,我已经熟悉编写 python 包阅读来自 https://packaging.python.org/en/latest/tutorials/packaging-projects/ and https://docs.python.org/3/tutorial/modules.html#packages 的笔记。这些让我知道了如何编写一堆 object class/functions 我可以导入它们。

我想要的是写一个像 pandas 和 numpy 这样的包,我 运行 导入它们,它们作为“object”工作,也就是说 most/all 函数在封装后加点。

例如导入后

import pandas as pd
import numpy as np

pdnp 将具有所有功能,可以用 pd.read_csv()np.arange() 调用, 运行 宁 dir(pd)dir(np) 会给我所有可用的功能。我试着查看 pandas src 代码来尝试复制它们的功能。但是,我做不到。也许我缺少或误解了其中的某些部分。非常感谢任何帮助或指出正确的方向来帮助我做到这一点。

在一个更一般的例子中,我想写一个包并导入它以在它后面点缀功能。例如。 import pypack 并且我可以调用 pypack.FUNCTION() 而不是必须像这样导入该函数 from pypack.module import FUNCTION 并调用 FUNCTION() 或将其作为子模块导入。

我希望我的问题有意义,因为我没有接受过正式的写入软件培训。

假设您有一个名为 my_library.

的模块(包)
.
├── main.py
└── my_library/
    └── __init__.py

/my_library/__init__.py

def foo(x):
    return x

在您的 main.py 中,您可以导入 my_library

import my_library

print(my_library.foo("Hello World"))

带有__init__.py的目录将是您的包,可以导入。

现在考虑一个更深入的例子。

.
├── main.py
└── my_library/
    ├── __init__.py
    └── inner_module.py

inner_module.py

def bar(x):
    return x

在你的/my_library/__init__.py中你可以添加

from .inner_module import bar

def foo(x):
    return x

您可以在主程序中使用 bar(),如下所示

import my_library

print(my_library.foo("Hello World"))
print(my_library.bar("Hello World"))