首页 > 解决方案 > 使用 setup.py 构建和安装后无法导入包

问题描述

我看过很多与setup.py安装和构建相关的帖子。虽然我无法为我的情况找到解决方案。

我的代码库的目录结构是:

release
├── lib
│   ├── __init__.py
│   └── calculator.py
├── release
│   ├── __init__.py
│   ├── __pycache__
│   ├── add
│   │   ├── __init__.py
│   │   ├── __pycache__
│   │   └── few_addition.py
│   ├── calculator.egg-info
│   │   ├── PKG-INFO
│   │   ├── SOURCES.txt
│   │   ├── dependency_links.txt
│   │   └── top_level.txt
│   └── sub
│       ├── __init__.py
│       └── few_subtraction.py
└── setup.py

lib.calculator.py 包含以下代码:

def addition(a,b):
    return a+b

def subtraction(a,b):
    return a - b

release.add.few_addition.py 包含:

from lib.calculator import addition

def check_3_4():
    print (addition(3,4))

release.sub.few_subtraction.py 包含:

from lib.calculator import subtraction

def check_3_4():
    print (subtraction(3,4))

我尝试使用 setup.py 打包发布文件夹

from setuptools import setup

setup(
    name="calculator",
    version='0.1',
    package_dir={'': 'release'},
    packages=['add','sub'],
)

但是当我在安装后尝试导入这个包时(使用pip3 install --editable . ),得到错误:

ModuleNotFoundError: No module named 'calculator'

导入代码行是:

from release.add import check_3_4

虽然我看到成功安装了计算器包。

我在 setup.py 中做错了吗?

目的是释放两个模块add and subtract

标签: pythonsetup.pypypi

解决方案


你不需要这package_dir条线。您需要将packages行更改为packages=setuptools.find_packages(),或列出所有包和子包:packages=['lib', 'release', 'release.add', 'release.sub']

import setuptools

setuptools.setup(
    name='calculator',
    version='0.1',
    packages=setuptools.find_packages(),
    # or packages=['lib', 'release', 'release.add', 'release.sub'],
)

推荐阅读