在 python 中导入子包时出现问题:我应该如何编写 __init__.py 文件
problems importing sub packages in python: how should I write the __init__.py files
我是构建包的新手,请多多包涵。我在导入最新 python 项目的子包时遇到问题。
我的目录结构如下:
├── package
│ ├── __init__.py
│ ├── subpackage_a
│ │ ├── __init__.py
│ │ └── functions_a.py
│ └── subpackage_b
│ ├── __init__.py
│ └── functions_b.py
└── setup.py
文件如下所示
setup.py
:
from setuptools import setup
setup(name='test_package',
version='0.3',
description='',
author='me',
packages=['package']
)
package/__init__.py: 空.
subpackage_a/__init__.py: from .functions_a import *
subpackage_b/__init__.py: from .functions_b import *
functions_a.py
包含
def hello_world_a():
print('hello its a')
和functions_b.py包含
def hello_world_b():
print('hello its b')
现在我打开 virtualenv
进入 setup.py 的目录,然后我 pip install .
。我期望访问子包 a 和 b 中包含的功能。但是当我尝试导入函数时,我得到一个模块未找到错误。
from package.subpackage_a import hello_world_a
ModuleNotFoundError: No module named 'package.subpackage_a'
同样的事情也适用于 subpackage_b。但是,如果我导入包,这是可以识别的。我觉得这种方法曾经有效,因为我有一些以这种方式编写的旧软件包不再有效。
也许我必须更改我的 init.py 文件?我究竟做错了什么 ?
setuptools.setup
不知道 subpackage_a
和 subpackage_b
存在。您只指定了顶级 package
。所以它不会在安装中包含这些子包。相反,您还应该指定它们:
setup(
...,
packages=['package', 'subpackage_a', 'subpackage_b']
)
这个过程可以通过find_packages()
自动执行:
from setuptools import find_packages
setup(
...,
packages=find_packages()
)
我是构建包的新手,请多多包涵。我在导入最新 python 项目的子包时遇到问题。
我的目录结构如下:
├── package
│ ├── __init__.py
│ ├── subpackage_a
│ │ ├── __init__.py
│ │ └── functions_a.py
│ └── subpackage_b
│ ├── __init__.py
│ └── functions_b.py
└── setup.py
文件如下所示
setup.py :
from setuptools import setup
setup(name='test_package',
version='0.3',
description='',
author='me',
packages=['package']
)
package/__init__.py: 空.
subpackage_a/__init__.py: from .functions_a import *
subpackage_b/__init__.py: from .functions_b import *
functions_a.py
包含
def hello_world_a():
print('hello its a')
和functions_b.py包含
def hello_world_b():
print('hello its b')
现在我打开 virtualenv
进入 setup.py 的目录,然后我 pip install .
。我期望访问子包 a 和 b 中包含的功能。但是当我尝试导入函数时,我得到一个模块未找到错误。
from package.subpackage_a import hello_world_a
ModuleNotFoundError: No module named 'package.subpackage_a'
同样的事情也适用于 subpackage_b。但是,如果我导入包,这是可以识别的。我觉得这种方法曾经有效,因为我有一些以这种方式编写的旧软件包不再有效。
也许我必须更改我的 init.py 文件?我究竟做错了什么 ?
setuptools.setup
不知道 subpackage_a
和 subpackage_b
存在。您只指定了顶级 package
。所以它不会在安装中包含这些子包。相反,您还应该指定它们:
setup(
...,
packages=['package', 'subpackage_a', 'subpackage_b']
)
这个过程可以通过find_packages()
自动执行:
from setuptools import find_packages
setup(
...,
packages=find_packages()
)