如何以使用“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
此外,为了清楚起见,最好将包名称和模块名称保持不同。
我正在尝试创建一个 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
此外,为了清楚起见,最好将包名称和模块名称保持不同。