python - 使用 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
。
解决方案
你不需要这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'],
)
推荐阅读
- python - 使用最小二乘法(Levenberg-Marquardt 算法)将双曲线拟合到线性数据的程序未按预期工作
- wix - WIX Win64="no" 无效
- javascript - CommandHandler 未发现命令有效负载异常
- elasticsearch - 通过给定日志结构的logstash中的grok过滤器解析日志文本
- java - 通过相同的休息服务产生 2 个不同媒体类型的单独响应
- maven - 从 Maven 运行 Payara Micro:“已部署 0 个存档”
- android - C ++:获取简单的函数名而不是完整的限定名
- asp.net - JsonConvert.DeserializeObject 不解码特殊字符
- apache-spark - PySpark - 使用 PySpark 连接到 HBASE - 包导入失败
- sql - 使用基于列 A 的修改值的条件更新列 B