Re: [問題] 請問為何os.getcwd()不總在sys.path內?
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
推
06/18 15:58,
6年前
, 1F
06/18 15:58, 1F
→
06/21 18:00,
6年前
, 2F
06/21 18:00, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 4 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章