PyPI - 允许使用不同名称导入模块

Dyl*_*ers 2 python pip python-import pypi python-packaging

我最近创建了一个简单的 python 包/库并将其上传到(PyPI)。没关系 - 我可以将我的项目上传到 pypi 并使用 pip 再次下载它,但我无法导入它,因为它包含一个句号. 我的包被调用dcode.py(这显然会导致导入问题),我想只需键入import dcode(不带)即可导入它.py。我已经四处寻找解决方案,但似乎找不到 - 我希望能够使用别名 ( dcode) 导入它,而不是dcode.py(这显然不起作用)。有没有办法做到这一点?我假设必须有(例如,两个包discord.pypy-cord都可以使用 导入import discord。有谁知道如何做到这一点?

以防万一您需要它,我的pyproject.toml文件如下所示:

[project]
name = "dcode.py"
version = "0.0.2"
authors = [
{ name = "Dylan Rogers", email = "opendylan@proton.me" },
]
description = "dcode - the Python package for everything"
readme = "README.md"
requires-python = ">=2.0"
classifiers = [
    "Programming Language :: Python :: 3",
    "License :: OSI Approved :: MIT License",
    "Operating System :: OS Independent",
]

[project.urls]
"Homepage" = "https://github.com/dylanopen/dcode.py"
"Bug Tracker" = "https://github.com/dylanopen/dcode.py/issues"
Run Code Online (Sandbox Code Playgroud)

我的整个项目都在github上。这是PyPI 项目

我尝试过导入dcode.py

import dcode.py
Run Code Online (Sandbox Code Playgroud)

但我刚刚收到这个错误:

File "/run/media/dylan/Programming/dcode.py-test/test.py", line 1, in <module>
    import dcode_py
ModuleNotFoundError: No module named 'dcode_py'
Run Code Online (Sandbox Code Playgroud)

如果有帮助,我正在使用 Manjaro Linux(不过不知道为什么它会有所帮助,我只需要知道如何允许用户dcode.py通过键入来导入import dcode,就像他们导入discord.py为一样discord

非常感谢您的帮助!

sin*_*roc 5

这是您的项目应该具有的推荐目录结构:

\n
dcode.py/\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 LICENSE\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 src/\n\xe2\x94\x82   \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 dcode/\n\xe2\x94\x82       \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82       \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 io/\n\xe2\x94\x82           \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x82           \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 file.py\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 tests/\n
Run Code Online (Sandbox Code Playgroud)\n

这里dcode(由 定义dcode.py/src/dcode)是唯一顶级可导入包的名称。并且它还包含一个子包dcode.io(由 定义dcode.py/src/dcode/io)。

\n

在PyPI上看到的并获得pip安装的实际分发项目的名称在包元数据中的文件中定义pyproject.toml

\n
[build-system]\nrequires = ["setuptools>=61.0"]\nbuild-backend = "setuptools.build_meta"\n\n[project]\nname = "dcode.py"\nversion = "0.0.1"\nauthors = [\n  { name = "Dylan Rogers", email = "opendylan@proton.me" },\n]\ndescription = "dcode - the Python package for everything"\nreadme = "README.md"\nrequires-python = ">=3.8"\n\n[project.urls]\n"Homepage" = "https://github.com/dylanopen/dcode.py"\n"Bug Tracker" = "https://github.com/dylanopen/dcode.py/issues"\n\n[tool.setuptools.packages.find]\nwhere = ["src"]\n
Run Code Online (Sandbox Code Playgroud)\n

不要将dist包含构建的sdistwheel分发包工件的目录推送到源代码存储库中。

\n

不要将任何*.egg-info目录推送到源代码存储库中。

\n

将所有实际的 Python 代码放在一个src目录中。

\n

项目的名称可以包含一个点,例如dcode.py,但我建议不要这样做。

\n

实际的顶级导入包和模块的名称可以与分发项目的名称完全不同。

\n

如果您在 中的包元数据中声明许可证的分类器pyproject.toml,那么它应该与源代码存储库中的实际许可证文件匹配(您有一个GNU GPL v3.0许可证文件,但有一个MIT许可证分类器)。

\n

参考

\n\n