我不熟悉构建软件包,因此请耐心等待。我在导入最新的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()
)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句