如何解决Python自定义包导入模块名称未在init上导入
我正在创建具有以下结构的自定义程序包:
test_package
│ README.md
│ setup.py
│
├───my_package
│ my_package.py
│ __init__.py
│
└───tests
tests.py
导入my_package
时,我必须使用
from my_package.my_package import my_class
o = my_class()
或
import my_package
my_package.my_package.my_class()
如何仅使用from my_package import my_class
没有向__init__.py
添加导入内容?我不能这样做,因为my package has dependency on pygdbmi。
我正在使用setuptools。
非常感谢!
import setuptools
import my_package
with open("README.md","r") as fh:
long_description = fh.read()
setuptools.setup(
# Project information
name=my_package.__title__,version=my_package.__version__,long_description_content_type="text/markdown",packages=setuptools.find_packages(),install_requires=["pygdbmi"],python_requires='>=3.7',# Tests
test_suite='tests'
)
__init__.py
:
__version__ = '0.0.1'
__title__ = 'my_package'
my_package.py
from pygdbmi.gdbcontroller import GdbController
class my_class:
def __init__(self):
print("my_class!!")
self.gdbmi = GdbController()
tests.py
:
import unittest
from my_package.my_package import my_class
class some_test(unittest.TestCase):
def test_constructor(self):
self.assertIsNotNone(my_class())
if __name__ == '__main__':
unittest.main()
解决方法
为了说明我的评论,
my_package.py
:
from pygdbmi.gdbcontroller import GdbController
__version__ = '0.0.1'
__title__ = 'my_package'
class my_class:
def __init__(self):
print("my_class!!")
setup.py
:
# ...
setuptools.setup(
# Project information
name=my_package.__title__,version=my_package.__version__,long_description_content_type="text/markdown",py_modules=['my_package'],# replaces `packages=setuptools.find_packages(),`
install_requires=["pygdbmi"],python_requires='>=3.7',# Tests
test_suite='tests'
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。