2016-09-12 8 views
0

私が取り組んでいるプロジェクトのパッケージベースのワークフローに移行しています。私は開発環境と本番環境を分離したいと思っています。私はsetuptoolsがある程度の容易さでこの可能性を提供していると思います。スクリプトでsetuptoolsを使用したPython相対インポート

私は次のように構造化プロジェクトいる:script.pyで

modulename/ 
    setup.py 
    modulename/ 
     file_a.py 
     script.py 

、私はfile_a.pyをインポートしたいです。現在私はimport file_aを実行してこれを行います。私は順列の多様性を試してみました

SystemError: Parent module '' not loaded, cannot perform relative import

:現在

from setuptools import setup, find_packages 

setup(name='modulename', 
    packages = find_packages(), 
    package_dir = {'': '../modulename'}, 
    scripts = ['modulename/script.py']) 

、私はpython setup.py installをやった後script.pyを実行して、私はエラーメッセージが表示されます:

私のsetup.pyは次のようになりますpackage_dir = ...、とりわけpackage_dir = {'': 'modulename'}ですが、インストール時に別のエラーが発生します。error: package directory 'modulename/modulename' does not exist

私は何が間違っているのか分かりません。 setuptoolsのオンラインドキュメントは、相対的なインポートを含む状況に対処するのに比較的貧弱です。誰かが私を正しい方向に向けることができますか?

+0

問題は 'setup.py'ではなく、' __main__'モジュールとして動作し、同時に相対インポートを使用する 'script.py'です。ここをクリックしてください(http://stackoverflow.com/questions/16981921/relative-imports-in-python-3) –

+0

さて、ここでスクリプトをパッケージの外に保ち、それから通常の輸入? –

+0

それは基本的にそれだと思います。 –

答えて

1

問題はsetuptoolsとは関係ありません。実行中のモジュール内の相対インポートを__main__として使用することは、そのままでは機能しません。回避策やハッキングがありますが、最も一般的な解決策は、スクリプトからパッケージを外したり、スクリプトファイルで絶対インポートを使用しているようです。

詳しくはRelative imports in Python 3をご覧ください。

関連する問題