2016-09-01 12 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は、私はパッケージをインストールし、content_analysisはから到達可能であることを確認しました

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) 

次のようになりますコマンドライン。また、私のContentAnalysisパッケージがコンピュータのどのCDからも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%ではないんだけど、私は唯一の真

python setup.py install --force 
のようにsetup.py --force引数を渡すことで更新するために、私のsite-packagesフォルダを取得することができました

私のsite-packagesフォルダには、関連するcommand_line.pyが含まれていて、コンソールエントリポイントは期待通りに機能します。

+1

私はまったく同じ問題を抱えていますが(command_line.pyはコピーされません)、 'python setup.py install --force'はそれを修正しません。この問題についてもっと学んだことはありますか? –

+0

もう一つの潜在的な問題は、 'sudo python setup.py install --force'と比較して' 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

ええと、これはデバッグするには少し不透明です。私は、エントリポイントの実装があまりにも多くの間接的な影響を受けるかもしれないと思います。次のように だからエントリポイントは動作:

  • プレースホルダスクリプトが
  • このスクリプトは、あなたのパッケージの名前が含まれているあなたのパス上に配置されたエントリーポイントでスクリプトをインストールし、エントリーポイント
  • の名前
  • これはegg-infoディレクトリやdist-infoディレクトリ

私は間接のこのレベルを疑うに住んでいるあなたが変更することができますentry_points.txtと呼ばれるメタデータ・ファイル内のエントリを検索するために使用されますバイナリエントリポイントを再インストールせずにどのエントリポイントがポイントしているかは、有利であるとみなすことができる。

これは、無効またはシャドーイングdist-infoまたはegg-infoがあると、ファイルが誤ったエントリポイントに読み込まれる可能性があることを意味します。

迅速

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

が使用されているエントリポイントを教えてくれます。これが古いか間違っているかどうかを確認することができます。

関連する問題