首页 > 解决方案 > 在 Python 中通过 setuptools 安装时如何使导入在控制台脚本中工作?

问题描述

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

我偶然发现了一个可能有点普通的问题,但在 Google 中找不到任何内容。

通常在运行带有 的控制台脚本时python3 my_script.pyimports通常会加载一些语句。

但是通过 setuptools 安装时,出现以下错误:

ModuleNotFoundError:没有名为“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
)

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

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!'

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

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

标签: pythonpipsetuptools

解决方案


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

from src.My_Object import My_Object

因为它是设置的,src是包含模块的顶级包。My_Object


推荐阅读