2011-05-20 22 views
1

私はPythonフレームワークを開発しており、トップレベルのパッケージ(プロジェクト名)に基づいてインポートを行いたいと考えています。ユーザーはフレームワーク全体をコピーし、独自のモジュールを作成してフレームワークを使用します。Pythonでトップレベルパスを使用してインポートするには?

私の現在の構造は次のようになります。

myapp/ 
    config.py 
    docs/ 
    framework/ 
    main.py 
    utils.py 
    file.py 
    lib/ 
    some_module.py 
    unit_tests/ 
    test_utils.py 

私は次のようにlibとunit_testsでのpythonファイルに以下のインポートを使用することができるようにしたい:

from myapp.framework import utils 

がありますこれを行う簡単な方法は?私はsys.path.append()ハックを試みたが、実際には動作しません。これを達成するための本当に無邪気な方法がある場合、私はそれを働かせるために余分な長さをつけても構いません。

編集:まあ私はsys.path.append()をもう一度試してみましたが、実際にはうまくいきますが、実際には洗練されたソリューションであり、別の方法があれば本当に聞きたいと思います。

+0

ことに問題が何であるの名前を変更するのですか?これは標準パッケージであり、これはそのままで動作するはずですか?なぜsys.path.append()を使って何かしたいのですか?自分のsetup.pyで適切なPythonパッケージを作り、それを適切にインストールして展開し、他のパッケージと同じように使用してください。*あなたの* REAL *の問題はどこですか? –

+0

'sys.path.append()'が動作しないのはなぜですか? –

+0

@ire_and_curses - sys.path.append()がうまくいかない理由はわかりません。希望するインポートを実現できなかっただけです。しかし、私の研究から、パスに追加するのはお勧めできないようです。 – trinth

答えて

-3

何が問題なのですか?これは標準パッケージであり、これはそのままで動作するはずですか?なぜsys.path.append()を使って何かしたいのですか?自分のsetup.pyで適切なPythonパッケージを作り、それを適切にインストールして展開し、他のパッケージと同じように使用してください.... REALの問題?また、「フレームワーク全体をコピーし、独自のモジュールを作成することで、ユーザーはフレームワークを使用します。平均?ユーザーはパッケージを正しくインストールする必要があります。他の誰もeasy_install、pip、またはdistributeを使用しているように、をインストールする必要があります。だから我々はこれらのツールを持っている。

+1

あなたは何を意味するのかよくわかりません。現在、トップレベルを使用してインポートすることはできません。私は余分なインストールの量を減らそうとしていますので、easy_installなしで行うことができれば、それをピップまたは配布すれば良いでしょう。しかし、これらのツールを使用すると、トップレベルのパッケージ名を使用してインポートできるようになるのはどうですか? – trinth

+0

ベストプラクティスの道に沿って、他のどの国よりもスマートになるようにはしないでください。あなたが欲しいものと必要とするもの:あなたはそれを適切なパッケージにすることで無料で得ることができます。...続きを読む... –

+0

そして私の答えを誰もがdownvotingしてください:周りをじっと見る? –

1

要約:同じ名前の2つのモジュールを互いに内に持つことはできません。 myappフォルダとmyapp.pyファイルがあります

これは、モジュールをインポートする順序が原因です。

  1. ので
  2. 現在のパッケージ
  3. カレントディレクトリ内のグローバルパッケージフォルダ

、あなたはconfig.pyにimport myapp.lib.some_moduleしようとしている場合は通訳が最初にあなたがmyappのを持っていることがわかります.pyと同じフォルダにあり、そのファイルから文字通りlib.some_moduleをインポートしようとします。これは存在しません。

myapp.myapp.lib.some_moduleをそのモジュールの外からインポートしようとするものでしょうか。

だから、あなたがするための最善のことはmyapp.pyファイル

+0

申し訳ありませんが、myapp.pyファイルは、他のファイルがあることを示すプレースホルダファイルであると考えられていました。実際にはフレームワークには存在しません。私は質問からそれを編集します。 – trinth

+0

私はこれが実際にファイル名であると思ったので、この問題を見ました... – JBernardo

関連する問題