3
/project  
../project/script.py  
../project/__init__.py  (This is a blank File)
setup.py  
other files like README.

#script.py
def function1():
    print "hi"

def main():
    function1()

if __name__ == '__main__':
    main()


#setup.py
setup(
name='project',
version= __version__,
long_description=markdown_contents,
packages=['project'],
entry_points={
  'console_scripts': [ 'project=project:main']
  }
)

インストールなどをpipすることができます。しかし、パッケージがインストールされたらプロジェクトを実行すると、init _.pyc'> has no 'main' attribute
が表示されますボックスでプロジェクトコマンドを実行するときに、script.py のメインで関数を実行したいだけです。私は何を間違っていますか?

4

2 に答える 2

7

mainあなたのメイン プロジェクト パッケージには実際に属性がありません。project:main意味: モジュールからインポートmainし、 にprojectそのようなオブジェクトがありません__init__.py

project.script:function1おそらく代わりに参照したいでしょう。そのオブジェクト存在します。

ベスト プラクティスは、main()関数を定義し、それをエントリ ポイントとして使用することです。

def function1():
    print "hi"

def main():
    function1()

if __name__ == '__main__':
    main()

これで、必要に応じてさらに追加できmain()ます。

setuptools によって生成されたスクリプトによってモジュールがインポートされると、__name__ == '__main__'テストは常にfalseになることに注意してください。scriptファイルは直接実行されません。

于 2013-10-03T22:17:37.863 に答える
2
'console_scripts': [ 'project=project.module:main']
于 2013-10-03T23:39:14.547 に答える