无法在开发模式下使用本地构建的 python 包
Unable to use locally built python package in development mode
我正在尝试启动一个超级简单的程序包来验证概念,但我看不出我缺少什么。
我的目标是能够做到以下几点:
python3 import mypackage
mypackage.add2(2)
>> 4
Github link
我创建了一个 public 存储库来重现该问题 here
git clone https://github.com/OliverFarren/testPackage
问题
我有一个基本的文件结构如下:
src/
mypackage/
__init__.py
mymodule.py
setup.cfg
setup.py
pyproject.toml
setup.cfg 是来自 here
的漂亮样板
setup.py 只是为了让 pip install 处于可编辑模式:
import setuptools
setuptools.setup()
我 运行 在我的 Pycharm 虚拟环境的顶级目录中执行以下命令:
python3 -m pip install --upgrade build
python3 -m build
这创建了我的 dist
和 build
目录以及 mypackage.egg-info
文件,所以现在目录如下所示:
testpackage
build/
bdist.linux-x86_64/
dist/
mypackage-0.1.0.tar.gz
mypackage-0.1.0-py3-none-any.whl
src/
mypackage/
mypackage.egg-info
__init__.py
mymodule.py
setup.cfg
setup.py
pyproject.toml
然后我尝试按如下方式安装软件包:
sudo pip3 install -e .
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Installing collected packages: mypackage
Running setup.py develop for mypackage
Successfully installed mypackage
我认为应该已经安装了它。除了当我尝试导入包时,我得到一个 ModuleNotFoundError
我想知道这是否是某种权限问题。当我尝试时:
sudo pip3 list
pip3 list
我注意到我得到了不同的输出,我可以在列表和 sys.path:
中看到我的包裹
~/testpackage/src/mypackage'
我只是不明白我在这里错过了什么。如有任何建议,我们将不胜感激!
好的,我发现了问题。发布解决方案并保留 github 存储库 - 修复,以防其他人遇到此问题。
原来我的setup.cfg
不是样板。
这是我的错误代码:
[metadata]
# replace with your username:
name = mypackage
author = Oliver Farren
version = 0.1.0
description = Test Package
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
[options]
package_dir =
= src/mypackage
packages = find:
python_requires = >=3.6
[options.packages.find]
where = src/mypackage
src/mypackage
应该是 src
,它正在内部 寻找包裹。
调试此问题的关键步骤是检查 mypackage.egg.info
文件。 SOURCES.txt
包含构建包中所有文件的列表,我可以清楚地看到在错误的构建中,src/mypackage/mymodules.py
和 src/mypackage/__init__.py
丢失了。所以 pip 正确安装了这个包,但是它是空的导致了一个非常混乱的错误消息。
我正在尝试启动一个超级简单的程序包来验证概念,但我看不出我缺少什么。
我的目标是能够做到以下几点:
python3 import mypackage
mypackage.add2(2)
>> 4
Github link
我创建了一个 public 存储库来重现该问题 here
git clone https://github.com/OliverFarren/testPackage
问题
我有一个基本的文件结构如下:
src/
mypackage/
__init__.py
mymodule.py
setup.cfg
setup.py
pyproject.toml
setup.cfg 是来自 here
的漂亮样板setup.py 只是为了让 pip install 处于可编辑模式:
import setuptools
setuptools.setup()
我 运行 在我的 Pycharm 虚拟环境的顶级目录中执行以下命令:
python3 -m pip install --upgrade build
python3 -m build
这创建了我的 dist
和 build
目录以及 mypackage.egg-info
文件,所以现在目录如下所示:
testpackage
build/
bdist.linux-x86_64/
dist/
mypackage-0.1.0.tar.gz
mypackage-0.1.0-py3-none-any.whl
src/
mypackage/
mypackage.egg-info
__init__.py
mymodule.py
setup.cfg
setup.py
pyproject.toml
然后我尝试按如下方式安装软件包:
sudo pip3 install -e .
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Installing collected packages: mypackage
Running setup.py develop for mypackage
Successfully installed mypackage
我认为应该已经安装了它。除了当我尝试导入包时,我得到一个 ModuleNotFoundError
我想知道这是否是某种权限问题。当我尝试时:
sudo pip3 list
pip3 list
我注意到我得到了不同的输出,我可以在列表和 sys.path:
中看到我的包裹~/testpackage/src/mypackage'
我只是不明白我在这里错过了什么。如有任何建议,我们将不胜感激!
好的,我发现了问题。发布解决方案并保留 github 存储库 - 修复,以防其他人遇到此问题。
原来我的setup.cfg
不是样板。
这是我的错误代码:
[metadata]
# replace with your username:
name = mypackage
author = Oliver Farren
version = 0.1.0
description = Test Package
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
Operating System :: OS Independent
[options]
package_dir =
= src/mypackage
packages = find:
python_requires = >=3.6
[options.packages.find]
where = src/mypackage
src/mypackage
应该是 src
,它正在内部 寻找包裹。
调试此问题的关键步骤是检查 mypackage.egg.info
文件。 SOURCES.txt
包含构建包中所有文件的列表,我可以清楚地看到在错误的构建中,src/mypackage/mymodules.py
和 src/mypackage/__init__.py
丢失了。所以 pip 正确安装了这个包,但是它是空的导致了一个非常混乱的错误消息。