SOへの最初の投稿なので、詳細が欠けている場合はご容赦ください。
os 経由で sys.path を変更することなく、別のサブフォルダーからの相対パスを使用する方法はありますか? 最終的にこれは cgi Web サーバーから実行されるので、python.exe への -m 引数は避けたいと思います。
私はPython 2.7.3を使用しており、次のファイル/ディレクトリ構造を持っています:
| myprog.py
|
+---functions
| myfunctions.py
| __init__.py
|
\---subfolder
mysub.py
ルートには、 myprog.py という .py ファイルが 1 つあります。
#file .\myprog.py
from functions import *
hello("Hi from Main")
functions フォルダーには、init .py、myfunctions.pyの 2 つのファイルがあります。
#The File: functions\__init__.py :
from myfunctions import *
#The File: functions\myfunctions.py :
def hello(sometext):
print sometext
最後に、サブフォルダーには次のものがあります。
#The File: subfolder\mysub.py :
from ..functions import *
hello("Hi From mysubprogram")
myprog.py は正常に実行され (親フォルダーから python.exe myprog.py を実行した場合)、「Hi From Main」と出力されますが、mysub.py (サブフォルダーから実行された場合) はエラーを出し続けます: ValueError: Attempted relativeノンパッケージで輸入
from ..functions.myfunctions import * など、mysub.py でさまざまな組み合わせを試しましたが、目的の結果が得られません。
私はいくつかの関連記事を読みました:
using __init__.py __init__.py
で定義されたクラスをインポートする方法
http://docs.python.org/2/tutorial/modules.html#packages-in-multiple-directories
しかし、これだけではわかりません。ああ、これが機能したら、可能な限り import * を削除したいと思いますが、呼び出されるたびに hello 関数へのフルパスを入力する必要はありません。 init.py を (すべてまたは別の方法で) クリーンアップすると、おまけになります。
Blckknght EDIT に感謝します。以下も見つかりました: 10 億回目の相対インポート
私が要求していることが不可能である場合、おそらく私は間違ったことを求めています. これが完全に悪い習慣である場合、sys.pathを使用して私の目標を達成する正しい方法ですか、それとも誰かが推奨できるものがありますか(../foldersから関数を呼び出さないなど)?