34

Pythonプロジェクトを整理する場合、この構造はそれを行うための標準的な方法のようです。

myproject\
    bin\
        myscript
    mypackage\
        __init__.py
        core.py
    tests\
        __init__.py
        mypackage_tests.py
setup.py

私の質問は、core.pyそれをで使用できるようにインポートするにはどうすればよいmyscriptですか?

両方の__init__.pyファイルが空です。

内容myscript

#!/usr/bin/env python
from mypackage import core
if __name__ == '__main__':
    core.main()

の内容core.py

def main():
    print 'hello'

myscriptディレクトリ内から実行するとmyproject、次のエラーが発生します。

Traceback (most recent call last):
  File "bin/myscript", line 2, in <module>
    from mypackage import core
ImportError: No module named mypackage

私は何が欠けていますか?

4

4 に答える 4

6

通常、setup.pyPythonインタープリターが見つけられる場所にパッケージをインストールする必要があります。これにより、インストール後import mypackageに機能します。開発ツリーから直接スクリプトを実行しやすくするために、通常はディレクトリbinにsimlinkを追加するだけです。もちろん、これにはシンボリックリンクをサポートするファイルシステムが必要です…</ p> ../mypackage/bin

于 2012-07-23T12:44:42.543 に答える
0

「最良の選択」があるかどうかはわかりませんが、以下は私の通常の習慣です。

  1. 実行したいスクリプトを /bin に入れます

  2. ディレクトリmyprojectで「python -m bin.script」を実行します

  3. script.py にインポートするときは、script.py がルートとして置かれているディレクトリを考慮してください。そう

    from ..mypackage import core
    

システムがシンボリック リンクをサポートしている場合は、それを選択することをお勧めします。

于 2013-07-18T20:24:04.350 に答える
0

setuptools の仕様に従って問題を解決しました。

setup.pyでは、モジュールを指定できますas an argument for the function setup()

packages = find_packages() 

これにより、すべてのモジュールが検索されます。

psこの関数をインポートする必要があります:from setuptools import setup, find_packages

于 2020-02-10T21:45:48.860 に答える