如何以使用“import mypackage”导入我需要的文件的方式创建包

how to create package in a way that using `import mypackage` will import the files i need

我正在尝试创建一个 pip 包。 我的文件结构是:

setup.py
README.md
LICENSE
mypackage/
    mypackage.py
    __init__.py

我的 __init__.py 看起来像这样:

from mypackage import *

mypackage.py

def somefunc():
    return "some value"

任何我的 setup.py 看起来像这样:

import setuptools
with open("README.md", "r") as fh:
    long_description = fh.read()
setuptools.setup(
     name='mypackage',  
     version='0.0.1',
     author="Yonatan Medan",
     description="some description",
     long_description=long_description,
   long_description_content_type="text/markdown",
     packages=["mypackage"],
     classifiers=[
         "Programming Language :: Python :: 3",
         "License :: OSI Approved :: MIT License",
         "Operating System :: OS Independent",
     ],

 )


我用python setup.py bdist_wheel打包了包裹, 并使用 pip install dist/mypackage-0.0.1-py3-none-any.whl 安装 问题是当我尝试使用 python

导入它时

我需要做这样的事情来导入 somefunc:

from mypackage.mypackage import somefunc

我想要的是:

from mypackage import somefunc

这是怎么做到的?

考虑到以下目录结构,您可以通过两种方式完成此操作。

package
├── hello.py
├── __init__.py

或者在 __init__.py 中定义函数,如下所示

from . import hello

def somefunc():
    print("Some function inside __init__.py")

然后在repl你可以做

>>> from package import somefunc
>>> somefunc
<function somefunc at 0x7f98e380d400>
>>> somefunc()
Some function inside __init__.py
>>> 

或者您需要从 __init__.py 中的模块导入 *,如下所示。

from .hello import *


def somefunc():
    print("Some function inside __init__.py")

然后像这样导入

>>> import package
>>> package.greet()
Hello
>>> from package import *
>>> greet()
Hello

此外,为了清楚起见,最好将包名称和模块名称保持不同。