2016-01-04 4 views
1

У меня такое ощущение, что я упустил какой-то момент здесь, а googling не достал меня далеко.python setuptools точка входа сценарий не может найти модуль

Я использую setuptools для сценария командной строки. Все идет хорошо, но после установки мои собственные файлы не «видны» автоматически сгенерированным скриптом начальной точки. Представьте себе следующий случай:

файл a.py содержит:

a = 12 

файл __main__.py содержит:

from a import a 

def main(): 
    print(a) 

if __name__ == '__main__': 
    main() 

файл __init__.py пуст. Файл setup.py содержит:

from setuptools import setup, find_packages 

setup(
    name='tep', 
    packages=find_packages(), 
    version='0.0.1', 
    entry_points={ 
     'console_scripts': [ 
      'tep = tep.__main__:main' 
     ] 
    }, 
) 

все правильно расположены в структуре каталогов:

  • test_entry_point
    • теп
      • __init__.py
      • __main__.py
      • a.py
    • setup.py

Локально все работает хорошо. Но после установки:

sudo -H python setup.py install 

и вызов из другой оболочки, либо с помощью tep или с помощью python -m tep, я получаю следующее сообщение об ошибке:

ImportError: No module named 'a' 

Так файл a.py не виден в объеме после монтаж . Есть идеи?

спасибо.

ответ

1

Это происходит потому, что вы не указали абсолютный путь модуля a. Помните, a находится в упаковке tep. Поэтому вам необходимо импортировать как это в __main__.py:

from tep.a import a 
+0

Hi. к сожалению, это не работает. Это даже прекращает работу локального вызова. например 'python tep/__ main __. py' приводит к' ImportError: нет модуля с именем 'tep''. Сохраняя его как в исходном сообщении, работает локальный вызов, но модуль не найден * после * установки. – xaratustra

+0

@xaratustra Hm, не может воспроизвести проблему или локальный вызов ни после установки в качестве пакета. Когда вы тестируете, вы всегда находитесь в 'test_entry_point' (т. Е. Каталог, содержащий' tep' subdir)? Вы используете 'virtualenv'? – vrs

+0

@xaratustra также, я не знаю, используете ли вы 'PYTHONPATH' и как выглядят ваши' sudoers', поэтому проверьте, могут ли они как-то вызвать проблему, поскольку вы используете 'sudo -H' для установки вашего пакета. Попробуйте 'sudo -H python -m tep', чтобы узнать, изменит ли это поведение. – vrs