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

时间:2016-03-19 15:13:06

标签: python setuptools setup.py

我正在尝试使用setup.py为我的项目添加一个可运行的脚本。我将其添加到scripts=的{​​{1}}参数中。当我从项目setup运行脚本时,脚本运行正常。我使用./solver安装它,并尝试使用sudo python setup.py install运行它,但我得到solver。如何使用setuptools正确安装和运行我的脚本?

ImportError: No module named 'model'

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'], )

solver

1 个答案:

答案 0 :(得分:1)

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

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 .