我正在尝试在PyPi上安装一个包,但是在配置成所需的语法时遇到了问题。最后,我希望能够使用以下语法在模块中使用函数:
import ucal
ucal.calculate(...)
此语法遵循所有公共库(也可以使用from ucal import calculate
)
我的目录结构如下:
ucal/
ucal/
__init__.py
ucal.py
ucal_units.py
setup.py
在ucal.py中:
import ucal_units
def calculate():
pass
我可以上传到PyPi,然后使用pip安装:
> python setup.py bdist_wheel
> python -m twine upload dist/ucal-0.1.3-py3-none-any.whl
(wait a minute)
> pip install --user ucal
但是,在新脚本中,以下脚本会产生错误:
import ucal
ucal.calculate() # <-- AttributeError: module 'ucal' has no attribute 'calculate'
事实证明,这是可行的:
from ucal import ucal
ucal.calculate()
但我不想要这种愚蠢的语法。ucal应该是顶级的。为了使所需的语法正常工作,我需要做哪些更改
我尝试将ucal/ucal中的所有文件移动到父目录,但这会导致ModuleNotFoundError: No module named 'ucal'
,即使模块已安装(使用pip list验证)
导入时,
__init__.py
中的命名空间似乎可以通过ucal.*
语法访问。一种选择是用ucal.py
的内容替换__init__.py
。这似乎不太正确另一个选项是在
__init__.py
中添加import语句:这看起来也很混乱,但也许这是公认的做事方式
在} 变量声明要导出的公共名称:
ucal/ucal.py
中,使用^{在
ucal/__init__.py
中,使用*import将这些名称拉入顶级命名空间:现在,用户将在顶级命名空间中看到
calculate
相关问题 更多 >
编程相关推荐