安装完wheel后如何导入模块?

4

我有一个自定义构建的模块,让我们称其为 abc,并执行 pip install /local_path/abc-0.1-py3-none-any.whl。安装是正确的。

>>pip install dist/abc-0.1-py3-none-any.whl
Processing ./dist/abc-0.1-py3-none-any.whl
Successfully installed abc-0.1

但是我无法导入这个模块。 在运行了 ppip freeze list 命令之后,我发现列表中该模块的名称为 abc @ file:///local_path/abc-0.1-py3-none-any.whl
我的问题是如何导入这个模块?谢谢。

.
├── requirements.txt
├── setup.py
├── src
│   ├── bin
│   │   ├── __init__.py
│   │   ├── xyz1.py
│   │   ├── xyz2.py
│   │   └── xyz3.py

这是我的setup.py文件。

with open("requirements.txt") as f:
    install_requires = f.read()

setup(
    name="abc",
    version="0.1",
    author="galaxyan",
    author_email="galaxyan@123.com",
    description="test whell framework",
    packages=find_packages(include=["src"]),
    zip_safe=False,
    install_requires=install_requires,
)

############ 更新 ############
即使更改了 setup.py,它仍然无法正常工作。

with open("requirements.txt") as f:
    install_requires = f.read()

setup(
    name="abc",
    version="0.1",
    author="galaxyan",
    author_email="galaxyan@123.com",
    description="test whell framework",
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    zip_safe=False,
    install_requires=install_requires,
)

这个问题通常是由于pip更新了一个与你正在运行的Python发行版不同的版本所致。尝试使用python -m pip install /local_path...命令,看看是否可以解决问题。 - Tim Roberts
你确定.whl文件已经正确构建了吗?很容易在构建wheel时意外地没有将可导入的内容放进去。请注意,wheel文件名不一定与导入名称匹配。 - wim
@wim 我在我的问题中添加了我的setup.py - galaxyan
3
include=["src"] 是错误的。请参阅 https://setuptools.pypa.io/en/latest/userguide/package_discovery.html#finding-simple-packages 上的文档。 - phd
install_requires = f.read() 看起来有误,需要用列表而不是Python字符串。 - wim
1个回答

3

setup.py 文件有误,这意味着你正在构建一个没有实际包的 wheel。

请改用:

setup(
    ...
    packages=find_packages(include=["src"]),
    ...
)

试试这个:

setup(
    ...
    packages=find_packages(where="src"),
    package_dir={"": "src"},
    ...
)

更多信息请参见测试和打包


谢谢您的建议。但在更改 setup.py 后它仍无法运行。 - galaxyan
你在“src”下有任何包吗?一个包必须是一个带有__init__.py文件的子目录,在这种情况下(命名空间包将不会被find_packages找到)。打印find_packages(where="src")的输出并告诉我们你得到了什么... - wim
是的,在src中有两个包,它们都有__init__.py文件。 - galaxyan
@galaxyan 这个文件夹结构看起来不错。请添加以下信息:您正在尝试导入哪些名称,显示导入语句的错误以及 find_packages(where="src") 的输出。 - wim
1
你无法导入 abc,因为你的 wheel 中只包含一个名为 bin 的包。请检查 import bin 是否可用。如果你想将其命名为 abc,则需要将子目录从 bin 重命名为 abc 并重新构建 .whl 文件。 - wim
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接