在 Python 中通过 setuptools 安装时如何使导入在控制台脚本中工作?

How to make imports works in a console script when installing by setuptools in Python?

通常我在 Python 中创建控制台脚本,但不使用设置工具。 现在我正在尝试使用 setuptools 自动管理本地安装并准备好分发。

我遇到了一个可能有点普通的问题,但在 Google.

中找不到任何东西

通常在运行一个带有python3 my_script.py的控制台脚本中,并且有imports个正常加载的语句。

但是用setuptools安装时,出现如下错误:

ModuleNotFoundError: No module named 'My_Object'

...如果我尝试在本地导入一个名为 My_Object.

的模块

setuptools 不应该也安装模块依赖项以使脚本工作吗?或者安装文件中缺少某些内容?

这是我在项目根目录下的setup.py文件内容:

from setuptools import setup

VERSION = '0.0.1'

def readme():
    with open('README.md') as f:
        return f.read()

setup(
    name='object-test',
    version=VERSION,
    description="Test setup script",
    long_description_content_type="text/markdown",
    long_description=readme(),
    keywords="Testing import in installation",
    author="Danilo Silva",
    author_email="contact@danilocgsilva.me",
    packages=["src"],
    entry_points={"console_scripts": ["importtest=src.entry:main"],},
    include_package_data=True
)

以下是我本地 src 文件夹中 entry.py 文件的内容:

from My_Object import My_Object

def main():
    print("Hello! This is just an application test for importing")
    my_object = My_Object()
    print(my_object.main())

# main()

My_Object.py 文件,也在 src 文件夹内:

class My_Object:

    def main(self):
        return 'Hello! And this is the imported output!'

通常,我取消注释 entry.py 中的最后一个 main() 只是为了检查一切是否正常,然后 运行 在控制台 python3 entry.py 中输入脚本。这可确保我的脚本中的一切正常,并且不会抛出 ModuleNotFoundError

如何使 import 语句在 setuptools 安装的控制台脚本中工作?我错过了什么?

据我所知,我认为 src/entry.py 文件的第一行应该是:

from src.My_Object import My_Object

由于已安装,src 是包含 My_Object 模块的 顶级 包。