简体   繁体   English

Python自定义包导入模块名称未在init上导入

[英]Python Custom package import module name not importing on init

I'm creating a custom package with the following structure:我正在创建一个具有以下结构的自定义包:

test_package
    │   README.md
    │   setup.py
    │
    ├───my_package
    │       my_package.py
    │       __init__.py
    │
    └───tests
            tests.py

When importing my_package , I have to use导入my_package ,我必须使用

from my_package.my_package import my_class

o = my_class()

Or或者

import my_package

my_package.my_package.my_class()

How can I use just from my_package import my_class WITHOUT adding imports to __init__.py ?如何仅使用from my_package import my_class而不__init__.py添加导入? I can't do that because my package has dependency on pygdbmi .我不能这样做,因为我的包依赖于 pygdbmi

I'm using setuptools.我正在使用设置工具。

Many thanks!!非常感谢!!

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 : __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 : 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()

To illustrate my comment,为了说明我的评论,

my_package.py : 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 : 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'
)

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM