我正在尝试创建一个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
这怎么办?
答案 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
另一方面,为了清楚起见,最好使软件包名称和模块名称保持不同。