我有一个简单的Python项目,实际上有一个包(称为forcelib
)包含一个模块(也称为forcelib
):
- setup.py
- forcelib
|- __init__.py
|- forcelib.py
我的setup.py
是从official example复制而来的,并且有明显的修改。
问题是我可以使用forcelib
安装pip
包,但是当我导入forcelib
时,它只有#34;双下划线"属性可见。也就是说,我看不到forcelib
模块。
要复制的示例:
git clone https://github.com/blokeley/forcelib
cd forcelib
pip install -e .
python
import forcelib
print(forcelib.__version__)
#正确打印0.1.2 dir(forcelib)
#唯一的内容是__version__
,__path__
等双下划线属性。我原本希望看到forcelib
,example_read
等也许我应该distribute just the module而不是打扰一个包。
(非常小)project is on GitHub。
非常感谢任何建议。
答案 0 :(得分:0)
似乎有两种方法可以做到:
保持相同的目录结构,但将以下内容放在__init__.py
来自.forcelib import *
分发模块,而不是包。遵循the instructions to use the py_modules参数而不是packages
中的setup.py
参数。这意味着将项目重组为:
方法(1)can be seen here。它具有隐藏私有函数和属性(不在__all__
中的任何内容)的优点,但客户端仍然可以看到模块forcelib.forcelib
,我认为它不应该。
方法(2)can be seen here。它更简单,但缺点是它不隐藏私有函数和属性。
答案 1 :(得分:-1)