2016-09-01 10 views
3

Я не могу импортировать скрипты консоли точки входа в моем пакете python. Ищете помощь, отлаживающую мою текущую проблему, поскольку я прочитал каждую соответствующую запись по этой проблеме.Python Точка входа «console_scripts» не найден

Вот что моя структура каталогов выглядит следующим образом:

├── ContentAnalysis 
│   ├── __init__.py 
│   ├── command_line.py 
│   ├── document.py 
│   ├── entities.py 
│   ├── sentiment.py 
│   ├── summary.py 
│   ├── text_tokenize.py 
│   ├── tokens.py 
├── local-requirements.txt 
├── requirements.txt 
├── server-requirements.txt 
├── setup.py 
└── tests 
    ├── tests.py 
    └── tests.pyc 

Вот что мой setup.py выглядит

from setuptools import setup 

config = { 
    'description': 'Tools to extract information from web links', 
    'author': 'sample', 
    'version': '0.1', 
    'install_requires': ['nose'], 
    'packages': ['ContentAnalysis'], 
    'entry_points': { 
     'console_scripts': ['content_analysis=ContentAnalysis.command_line:main'], 
    }, 
    'name':'ContentAnalysis', 
    'include_package_data':True 
} 

setup(**config) 

Я установил пакет и проверить, что content_analysis достижим из командная строка. Я также подтвердил, что мой пакет ContentAnalysis импортируется из интерпретатора python с любого компакт-диска в компьютере. Тем не менее, я все еще получаю «Точка входа не найдена ошибка в исполнении»

[email protected]:/opt/content-analysis$ content_analysis -l 'http://101beauty.org/how-to-use-baking-soda-to-reduce-dark-circles-and-bags-under-the-eyes/' 
Traceback (most recent call last): 
    File "/opt/anaconda2/bin/content_analysis", line 11, in <module> 
    load_entry_point('ContentAnalysis==0.1', 'console_scripts', 'content_analysis')() 
    File "/opt/anaconda2/lib/python2.7/site-packages/setuptools-26.1.1-py2.7.egg/pkg_resources/__init__.py", line 565, in load_entry_point 
    File "/opt/anaconda2/lib/python2.7/site-packages/setuptools-26.1.1-py2.7.egg/pkg_resources/__init__.py", line 2588, in load_entry_point 
ImportError: Entry point ('console_scripts', 'content_analysis') not found 

Любая помощь или советы по отношению к отладке это ценится

Изменить # 1:

Попытка отладки вопрос, Я заметил, что command_line не достижим как подмодуль в Контент-анализ

>>> import ContentAnalysis 
>>> ContentAnalysis.tokens 
<module 'ContentAnalysis.tokens' from '/opt/anaconda2/lib/python2.7/site-packages/ContentAnalysis/tokens.pyc'> 
>>> ContentAnalysis.command_line 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'module' object has no attribute 'command_line' 
>>> 

оказывается, что command_line является не добавляется в соответствующую папку site_packages.

[email protected]:/opt/anaconda2/lib/python2.7/site-packages/ContentAnalysis$ ls 
data   entities.py __init__.pyc summary.py  text_tokenize.pyc 
document.py entities.pyc sentiment.py summary.pyc  tokens.py 
document.pyc __init__.py sentiment.pyc text_tokenize.py tokens.pyc 

Интересно, почему?

+0

Возможно, разрешение отклонено – Evgenii

ответ

1

Исследование соответствующей папки пакетов сайтов подсказывало мне, что моя команда python setup.py install не помещала все необходимые файлы там, где они должны были быть.

Я до сих пор не 100% от основной причины этого вопроса, но я только был в состоянии получить мою папку сайта-пакеты по-настоящему обновить пропускание setup.py в --force аргументе, как в

python setup.py install --force 

Теперь моя папка-пакеты содержит соответствующую команду command_line.py, а точка входа в консоль работает так, как ожидалось.

+1

У меня такая же проблема (command_line.py не копируется), но 'python setup.py install -force' не исправляет ее. Вы узнали больше об этой проблеме? –

+0

Еще одна потенциальная проблема заключается в том, что пользователь запускает 'python setup.py install -force' по сравнению с' sudo python setup.py install -force'. Возможно, у разных пользователей будут разные переменные пути, и вы можете потерять переменную пути, необходимую для поиска скрипта. https://stackoverflow.com/questions/39255544/conda-setuptools-install-changes-shebangs-to-default-python-install – GrantD71

+0

Спасибо. Я обошел это, используя колеса: 'python setup.py bdist_wheel', за которым следует' pip install .'. –

0

Хм, все это немного непрозрачно для отладки - я думаю, что реализация точек входа может пострадать от слишком большой косвенности. Так точки входа работают следующим образом:

  • При установке сценария с точкой входа заполнителем скрипт помещается на вашем пути
  • Этот сценарий содержит имя пакета и имя точки входа
  • Это используется для поиска записи в файле метаданных называется entry_points.txt, который живет в egg-info каталогов или dist-info каталогов

Я подозреваю, что этот уровень косвенности позволяет изменять какие точки входа указывают без переустановки двоичных точек входа, которые могут считаться выгодными.

Это означает, что если есть задержка или затенение dist-info или egg-info файлы могут привести к загрузке неправильных точек входа.

быстрого

strace 2> >(grep --line-buffered entry_points.txt) -e open package 

покажет вам, какие точки входа используется. Затем вы можете проверить, является ли это устаревшим/неправильным.