python - 使用 setup.py 安装的脚本引发 ImportError

标签 python setuptools setup.py

我正在尝试使用 setup.py 为我的项目添加可运行的脚本。我将其添加到 setupscripts= 参数中。当我从项目 ./solver 运行该脚本时,该脚本运行良好。我使用 sudo python setup.py install 安装它,并尝试使用 solver 运行它,但我得到 ImportError: No module named 'model'。如何使用 setuptools 正确安装和运行我的脚本?

SOLVER/
    solver/
        model/
            __init__.py
        view/
             __init__.py
        controller/
             __init__.py
        __init__.py
        main.py 
        solver <-- starts the app
    setup.py
    README.md
    LICENCE

setup.py:

#!/usr/bin/env python3
import os
from setuptools import setup, find_packages

setup(
    name='SOLVER',
    version='1.0.0',
    description='SOLVER app test',
    author=['me'],
    license='BSD',
    classifiers=['Programming Language :: Python :: 3 :: Only'],
    packages=['solver'],
    #packages=find_packages(exclude=["doc", "tests"]),
    install_requires=['numpy>=1.10.4'],
    scripts=['solver/solver'],
)

求解器:

#!/usr/bin/env python3

from solver import main
main.gui_mode()

最佳答案

您需要在packages参数中列出所有包,包括子包。您可以使用 find_packages 为您生成该列表。目前,您只需将 Python 文件安装在 solver/ 目录中。

from setuptools import setup, find_packages

setup(
    ...
    packages=find_packages(),
    ...
)

您还应该使用 entry_points 而不是 scripts,特别是当您的脚本所做的只是导入和调用一个函数时。 setuptools 将从入口点构建脚本,这些脚本使用正确的 Python 二进制文件来安装它们。

setup(
    ...
    packages=find_packages(),
    entry_points={
        'console_scripts': [
            'solver=solver.main:gui_mode'
        ]
    ...
    }

您可以在开发模式下安装软件包来获取脚本,而不是自己编写脚本。

pip install -e .

您还应该使用 pip 安装到系统中。它会跟踪已安装的内容,以便您稍后可以将其卸载。

pip install .

关于python - 使用 setup.py 安装的脚本引发 ImportError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36103395/

相关文章:

python - 如何使用 xpath & lxml 获取节点的全部内容?

Python 有缺陷的直方图?

python - 在 ubuntu 上将 setuptools 从 20.10.1 降级到 18.2

python - 如何正确获取console_scripts install_scripts目录?

python - 在python3.x上启动scrapy项目时出现一些错误

python - 将父类作为参数传递?

python - 在 setup.py 中使用来自依赖项的代码

python - pyinstaller导入错误: No module named pkg_resources

python - 如何从 `src/`目录下的python包访问项目根目录中的文本文件

python - 如何使用 python 包分发数据文件以使其可读?