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

时间:2019-04-08 06:45:33

标签: python pip packaging

我正在尝试创建一个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

这怎么办?

1 个答案:

答案 0 :(得分:0)

考虑以下目录结构,您可以通过以下两种方式进行操作。

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

__init__.py内定义函数,如下所示

from . import hello

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

然后您可以做到

>>> 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

另一方面,为了清楚起见,最好使软件包名称和模块名称保持不同。