2016-03-19 5 views
1

Я пытаюсь добавить исполняемый скрипт для моего проекта с setup.py. Я добавил его к аргументу scripts=setup. Сценарий отлично работает, когда я запускаю его из проекта, ./solver. Я устанавливаю его с sudo python setup.py install и пытаюсь запустить его с solver, но я получаю ImportError: No module named 'model'. Как правильно установить и запустить мой скрипт с помощью setuptools?Сценарий, установленный с setup.py raises ImportError

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:

#!/usr/bin/env python3 

from solver import main 
main.gui_mode() 

ответ

1

Вы должны перечислить все пакеты, включая суб-пакеты, в 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 . 
+0

Странно, 'пункт установить .' устанавливает все в' python2.7' по какой-то причине, в то время как он должен быть 'python3', потому что я' 'pip2' для python2.7'. – minerals

+0

Затем используйте 'pip3', или' python3 -m pip'. Я не знаю, как выглядит ваша система, поэтому я просто ставил самую общую версию. – davidism

+0

Кроме того, я все еще получаю ошибки импорта. 'File "/home/tastyminerals/dev/SOLVER/solver/view/main_controller.py", строка 18, в от model.pipeline импорта * ImportError: Нет модуль с именем model.pipeline' Хотя я знаю, что' pipe.py' существует в директории 'model /'. – minerals