自行创建的模块不可调用

self created module not callable

我正在尝试创建一个 python 包,因此在创建包含我所有文件(包括 __init__.py 文件)的文件夹后,我将该文件夹移至 /usr/local/lib/python3.8/site -包/.

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

Exception has occurred: ModuleNotFoundError
No module named 'ClockTower'

我做错了什么?

您无法import ClockTower成功的原因是您还没有真正安装它。

distutils

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

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

如果你只是想要一个快速和最小的解决方案,首先创建一个新目录,然后在这个文件夹中创建一个名为 setup.py 的文件,将包含包 files/code 的目录也放在里面。

您的封闭文件夹应如下所示 - 为清楚起见,此处省略了 ClockTower 中的附加 files/directories。

/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 .

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

重要说明: 这种方法不考虑 ClockTower 的任何外部依赖性(例如非内置 packages/modules),它假设这些将由口译员提供 - 例如已经使用类似 requirements.txt 安装程序的方式安装。

setuptools

setuptools 是一个功能更齐全的库,用于分发 Python 包。这种丰富的功能是以增加complexity/time学习和实施为代价的。

如果您要与其他人共享此包,我建议您查看 setuptools user guide 并继续创建一个强大且可移植的包分发。