1

我正在尝试创建一个 python 包,所以在创建包含我所有文件的文件夹后,包括一个__init__.py文件,我将文件夹移动到 /usr/local/lib/python3.8/site-packages/。

当我尝试使用import ClockTower(文件夹名称)它返回

Exception has occurred: ModuleNotFoundError
No module named 'ClockTower'

我究竟做错了什么?

4

1 回答 1

1

您无法import ClockTower成功的原因是您尚未实际安装它。

distutils

如果该软件包仅在您自己的机器上供个人使用,我建议您使用distutils创建一个简单的setup.py脚本来启用您的软件包的安装 -distutils通常作为内置软件包分发,但是基于 Debian 的系统默认情况下可能没有它(请参阅在这里)。

以下是一些关于创建脚本的分步文档setup.py,使您能够在整个系统中安装和使用您的包。

如果您只想要一个快速且最小的解决方案,首先创建一个新目录,然后在该文件夹中创建一个名为setup.py的文件,将包含包文件/代码的目录也放入其中。

您的封闭文件夹应如下所示 -ClockTower为清楚起见,此处省略了其他文件/目录。

/home/usr/Desktop/EnclosingDir
├───setup.py
│
└───ClockTower
    └───__init__.py

setup.py应该看起来像这样来定义ClockTower包的基本安装。

from distutils.core import setup

setup(
    name='ClockTower',
    version='1.0.0',
    packages=['ClockTower'],
)

要安装您的包以供指定的解释器(此处python3.8)使用,只需导航到包含setup.py并运行的封闭文件夹。

python3.8 -m pip install .

您应该会看到一些控制台输出,如果安装成功,您应该ClockTower 1.0.0会在运行时看到列出的内容,python3.8 -m pip list并且能够成功import ClockTower使用此解释器。

重要提示:这种方法不考虑任何外部依赖项(例如,非内置包/模块)ClockTower,它假定解释器可以使用这些依赖项 - 例如已经使用requirements.txt安装过程之类的东西安装。

setuptools

setuptools是一个用于分发 Python 包的功能更全面的库。这种丰富的功能是以增加学习和实施的复杂性/时间为代价的。

如果您要与其他人共享此软件包,我建议您查看setuptools用户指南并遵循以创建一个强大且可移植的软件包分发。

于 2020-12-11T10:57:04.777 回答