使用setup.py构建的命令行工具出现Python ModuleNotFoundError
我正在尝试制作一个简单的命令行工具,并用 setup.py
来打包它。以下是我的文件夹结构。
├── s3_md5
│ ├── __init__.py
│ ├── cmd.py
│ └── src
│ ├── __init__.py
│ ├── cli.py
│ ├── logger.py
│ ├── s3_file.py
│ └── s3_md5.py
├── setup.py
└── test
├── __init__.py
├── conftest.py
├── test_calculate_range_bytes_from_part_number.py
├── test_get_file_size.py
├── test_get_range_bytes.py
└── test_parse_file_md5.py
在 setup.py
中
'''installer'''
from os import getenv
from setuptools import find_packages, setup
setup(
name="s3-md5",
description="Get fast md5 hash from an s3 file",
version=getenv('VERSION', '1.0.0'),
url="https://github.com/sakibstark11/s3-md5-python",
author="Sakib Alam",
author_email="16sakib@gmail.com",
license="MIT",
install_requires=[
"boto3==1.26.41",
"boto3-stubs[s3]",
],
extras_require={
"develop": [
"autopep8==2.0.1",
"moto==4.0.12",
"pytest==7.2.0",
"pylint==3.1.0",
],
"release": ["wheel==0.43.0"]
},
packages=find_packages(exclude=["test", "venv"]),
python_requires=">=3.10.12",
entry_points={
'console_scripts': ['s3-md5=s3_md5.cmd:run'],
}
)
还有 cmd.py
'''driver'''
from time import perf_counter
from boto3 import client
from src.cli import parse_args
from src.logger import logger
from src.s3_md5 import parse_file_md5
def run():
// some stuff with imports from src
if __name__ == "__main__":
run()
当我直接从 s3_md5
文件夹运行 cmd.py
时,一切都很好。但是,当我把它打包并安装成命令行工具后再运行,就出现了问题
ModuleNotFoundError: No module named 'src'
我检查了 lib 文件夹,发现里面确实有 src 文件夹。奇怪的是,当我在 cmd.py
中使用 s3_md5.src.cli
时,命令行工具可以正常工作,但从目录直接运行脚本就不行了,因为它引用的是已安装的包,而不是代码本身,这在开发时会造成问题。我尝试阅读关于 Python 模块系统的所有资料,但还是搞不清楚。我怀疑是 PYTHONPATH 不知道去哪里找 src
,但我也可能错了。我试过使用相对导入,这在命令行工具中有效,但直接运行 python cmd.py
时却提示没有已知的父级。
0 个回答
暂无回答