我有一个简单的 Python 项目,实际上只有一个包(称为 forcelib),其中包含一个模块(也称为 forcelib):
- setup.py
- forcelib
|- __init__.py
|- forcelib.py
我的 setup.py 是从 official example 复制的并且有明显的编辑。
问题是我可以使用 pip 安装 forcelib 包,但是当我导入 forcelib 时,它只有“双下划线” "属性可见。也就是说,我看不到 forcelib 模块。
要复制的示例:
git clone https://github.com/blokeley/forcelibcd forcelibpip install -e .python导入forcelibprint(forcelib.__version__)# 正确打印 0.1.2dir(forcelib)# 内容只有__version__,__path__等双下划线属性。我曾期望看到forcelib、example_read等。
也许我应该distribute just the module而不是为包裹而烦恼。
(非常小)project is on GitHub .
如有任何建议,我们将不胜感激。
请您参考如下方法:
似乎有两种方法可以做到这一 pip :
保持相同的目录结构,但将以下内容放入
__init__.py从 .forcelib 导入 *
分发一个模块,而不是一个包。关注the instructions to use the py_modules
setup.py中的参数而不是packages参数。这意味着将项目重组为:- setup.py
- forcelib.py
方法 (1) can be seen here .它的优 pip 是隐藏了私有(private)函数和属性(__all__ 中没有的任何东西),但客户端仍然可以看到模块 forcelib.forcelib,我不认为这是它应该。
方法 (2) can be seen here .它更简单,但缺 pip 是没有隐藏私有(private)函数和属性。
