2011-07-19 4 views
2

議論のために、既に定義済みのmathのような名前のモジュールを作成し、別のモジュールからインポートしたいとしましょう。ここに私のコードのディレクトリ構造は次のとおりです。Pythonの "compiled statement"を無効にする

__init__.py 
math.py 

ので__init__.pyに私は__init__.pyを実行した場合、内蔵の数学ではなく、数学モジュールの選択されます

from math import whatever 

のように行いたいです私は含めましたが、私は数学モジュールにアクセスしたいと思います。私がこれを回避するために見つけた唯一の方法は、単にmath.pyの名前をmymath.pyのようなものに変更することです。モジュールの元の名前を維持しながら、これをどのように達成できますか?

+0

なぜそれが同じ名前を持つ必要があります? – alex

+0

私はモジュールの元の著者ではないためです。誰も私の頭に銃を持っていませんが、元の作者に任せます。さらに、私はこのような何か新しいことを学びます。 – demongolem

答えて

3

まず、モジュールにstdlibモジュールと同じ名前を付けることをお勧めします。予期しない結果にいつ旅行するかは分かりません。

第2に、あなたが言っていることは完全に可能です。

  1. 名前をfooとして作成します。
  2. あなたが言及した内容の__init__.pyを作成してください。あなたはその何かがプリントされますpython __init__.pyを行う場合
  3. print "something"
  4. などのコンテンツにmath.pyを作成します。

おそらくあなたは何か他のことをしていますか?

+0

私は再試行し、私の設定のために言うとおりです。名前が既定のモジュールと同じ場合、私はImportErrorを取得します。名前が異なる場合、プログラムは完了するまで実行されます。私はPyDevで作業し、私のデフォルトのPythonバージョンは現在3.1です。 – demongolem

+0

私は、PyDevの設定上の問題(Eclipseにsrcディレクトリが正しいことを伝えています)を見ました。この答えは、実際に働くべきであり、適切な説明である(そして私の心を揺さぶる)。だからもし私が 'mypackage.mathからインポートしたら、それは十分なはずです。私は、デフォルトのモジュール名を複製することは非常に貧しい習慣であることを認めますが、この特定のシナリオの根拠を質問セクションで説明しようとしました。 – demongolem

2

一般的に、デフォルトモジュールを置き換えるのは面倒です。副作用はわかりません。私はまずあなたがそれをいくつかのサブフォルダに置くことを勧めなければならないと思う(もしそれがフォルダ "私"の場合はimport my.math as mathにすることができる)、その後それを改名することを提案する。

必要な場合は、math.pyのパスがsys.pathの最初であることを確認できます。まず、次のようにしてください:

import sys, os 
sys.path.insert(0,os.getcwd()) 
1

あなたのパッケージはあなたが行うことができますtestpack呼び出された場合:

testpack/myfile.py testpack/math.pyがある

import math 
from testpack import math as mymath 

print (math.sin(3)) 
print (mymath.hello()) 

def hello(): 
    print ('this is math') 

このあなたには:

0.14112000806 
this is math 

ので、あなたは

編集両方の数学のモジュールを使用することができます:python 3.xのための更新
:フォルダestructureがある:

mypackages\ 
    __ini__.py 
    .......... 
    .......... 
    testpack\ 
     __init__.py 
     math.py 
     myfile.py 
関連する問題