看板 Python 關於我們 聯絡資訊
import os,sys,inspect ##################################### # get file dir then add relative path file = inspect.getfile(inspect.currentframe()) pathdir = os.path.dirname(os.path.abspath(file)) + '/..' sys.path.insert(0,pathdir) #################### # import your module import say_hello say_hello.hello_world() ※ 引述《clsmbstu (missing)》之銘言: : 假設我有一個資料夾(helloworld)在桌面上,結構如下: : helloworld : |--say_hello.py : |--another_hello : |--import_hello.py : say_hello.py: : ```python : def hello_world(): : print("Hello World!") : if __name__ == "__main__": : hello_world() : ``` : import_hello.py: : ```python : import os : print(os.getcwd()) : print(os.listdir()) : # import sys : # sys.path.append(".") : import say_hello : say_hello.hello_world() : ``` : 這時候,如果我在helloworld資料夾裡執行`python another_hello/import_hello.py`, : 會得到: : /Users/clsmbstu/Desktop/helloworld : ['__pycache__', 'another_hello', 'say_hello.py'] : Traceback (most recent call last): : File "another_hello/import_hello.py", line 5, in <module> : import say_hello : ModuleNotFoundError: No module named 'say_hello' : 一旦我把import_hello.py裡面那兩行un-comment, : 我就可以得到我的預期結果("Hello World!"), : 但我仍然有兩個問題覺得很困惑: : 1. 明明cwd (current working directory)是helloworld/, : os.listdir()也有找到say_hello.py, : 為什麼會有ModuleNotFoundError, : 反而還要把cwd加進sys.path裡? : 這有點違反我的直覺... : 還是cwd是呼叫的位置、sys.path是被呼叫的py檔的位置? : 2. 即使用了sys.path.append("."),我仍然擔心這不是個好解法, : 因為一旦我從別的資料夾呼叫import_hello.py, : 一樣會發生ModuleNotFoundError。 : 有沒有什麼辦法,是可以無論我在哪裡呼叫import_hello.py, : Python都知道要「去import_hello.py的上一層目錄尋找say_hello模組」? : 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.223.33.167 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1529302658.A.E14.html
justoncetime: 推標色 06/18 15:58
clsmbstu: 感謝 我再研究一下 06/21 18:00