我已经使用setuptools创建了我的第一个python包。从我的包目录的顶层运行python -m build
似乎可以使包很好,并且包文件是按预期在dist中创建的。但是,当我安装包时,安装的包的名称被-所取代,这使得导入python文件几乎是不可能的。
这是我的目录布局:
(venv) cunninwe@MBLS015 dpu2 % tree /Users/cunninwe/Documents/dpu2
/Users/cunninwe/Documents/dpu2
├── Dockerfile
├── LICENSE
├── README.md
├── dist
│ ├── myorg_devops_utils-0.0.1-py3-none-any.whl
│ └── myorg_devops_utils-0.0.1.tar.gz
├── pyproject.toml
├── requirements.txt
├── src
│ ├── devops_python_utils_package
│ │ ├── __init__.py
│ │ ├── file0.py
│ │ ├── file1.py
│ │ ├── file2.py
│ │ ├── file3.py
│ │ ├── fileA.py
│ │ ├── file4.py
│ │ ├── file5.py
│ │ ├── file6.py
│ │ ├── file7.py
│ │ ├── fileB.py
│ │ ├── rcfile.rc
│ │ ├── file8.py
│ │ ├── file9.py
│ │ └── file10.py
│ └── myorg_devops_utils.egg-info
│ ├── PKG-INFO
│ ├── SOURCES.txt
│ ├── dependency_links.txt
│ └── top_level.txt
├── tests
│ ├── test_file1.py
│ ├── test_file2.py
│ ├── test_file3.py
│ ├── test_file4.py
│ ├── test_file5.py
│ ├── test_file6.py
│ ├── test_file7.py
│ └── test_file8.py
└── venv
我的pyproject.toml文件如下:
[build-system]
requires = ["setuptools>=61.0"]
build-backend = "setuptools.build_meta"
[project]
name = "myorg_devops_utils"
version = "0.0.1"
authors = [
{ name="me", email="me@myorg.com" },
]
description = "Python utilities used by DevOps team"
readme = "README.md"
license = { file="LICENSE" }
requires-python = ">=3.9"
classifiers = [
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
[project.urls]
我是从这个结构的根运行python -m build
的。然后切换到dist子目录,并运行whl文件的pip安装。
(venv) cunninwe@MBLS015 dist % python -m pip install myorg_devops_utils-0.0.1-py3-none-any.whl
Processing ./myorg_devops_utils-0.0.1-py3-none-any.whl
Installing collected packages: myorg-devops-utils
Successfully installed myorg-devops-utils-0.0.1
环境: Mac
所以:
我试过使用importlib.import_module('myorg-devops-utils')
,但这也不起作用。
发布于 2022-09-02 21:03:01
真正的问题是您的顶级导入包是devops_python_utils_package
(而不是您所期望的myorg_devops_utils
,它是您的分发包的名称)。所以你需要import devops_python_utils_package
。
导入包和导入模块的名称不应该更改。如果他们这么做了,那就真的出了问题。另一方面,发行包的名称可以将其下划线_
替换为-
,它们在package生态系统中是等价的(一种是规范形式)。
https://stackoverflow.com/questions/73585854
复制相似问题