Re: [問題] 請問為何os.getcwd()不總在sys.path內?
抱歉,我一開始舉的例子似乎過於簡化且容易引起困惑,
我試著把狀況寫得更詳盡一點,但可能會稍長,請大家見諒。
先回覆ThxThx的問題:
→
06/18 19:46,
06/18 19:46
→
06/18 19:46,
06/18 19:46
就一般來說,我還真不瞭解Python的import邏輯是什麼...
假如我有一個自己寫的package foo,裡面有個common.py,
另外有個專門放分析ipynb的資料夾bar,bar跟foo在同一層。
每次我都要先在分析的開頭寫sys.path.append(".."),
才能from foo.common import *。
我也覺得這樣寫好像很醜,
但是我又不能直接寫成from ..foo.common import *,
(ValueError: attempted relative import beyond top-level package)
我不懂為什麼會這樣,明明才往上一層,怎麼就beyond top-level了。
希望有人可以順便為我解惑。
--------
回到我本次的project,我的資料夾最初大概長這樣:
X_project
|--ocr_tools.py
|--recognize.py(請見本板#1R9exc1U)
|--requirements.txt
|--test_list.json
|--photos
|--(很多張測試用照片)
|--X_manuals
|--(很多csv、json等格式的資料檔案)
|--functionality_check
|--validate.py
|--validation_log.txt
其中,
綠色的部分是想轉成CLI功能的(這裡看到的都只是scripts),
recognize.py包含主要的功能,validate.py是給開發者跑自我診斷用的。
BTW,這是一個內部的套件,所以沒有要上到PyPI。
粉紅色是運行依賴的資料(亮色是需要讀、深色是需要寫)。
現在,假設我在X_project資料夾下,
我可以python recognize.py -i <image_file>、
以及python functionality_check/validate.py跑自我診斷。
現在,因為要包成package,所以我把架構做了點調整,變成:
X_project
|--setup.py
|--clsmbstu_ocr
|--__init__.py
|--ocr_tools.py
|--recognize.py
|--requirements.txt
|--test_list.json
|--photos
|--(很多張測試用照片)
|--X_manuals
|--(很多csv、json等格式的資料檔案)
|--functionality_check
|--__init__.py
|--validate.py
|--validation_log.txt
另外,把recognize.py與validate.py可運行的部份改成一個main_func。
所以我的setup.py是這樣寫的:
```
import re
from setuptools import setup, find_packages
with open("clsmbstu_ocr/requirements.txt") as req:
dependencies = [re.match(r"(.+)\n", line).group(1) for line in req]
setup(
name="clsmbstu_ocr",
version="1.0.0-1",
packages=find_packages(),
install_requires=dependencies,
package_data={
"": ["*.json", "*.jpg", "*.png", "*.txt"]
},
entry_points={
"console_scripts": [
"ocr_view = clsmbstu_ocr.recognize:main_func",
"ocr_validate = clsmbstu_ocr.functionality_check.validate:main_func"
]
},
author="clsmbstu",
author_email="XXX@mail",
description="blablabla"
)
```
然後運行python setup.py install,看起來安裝可以跑完,
但是一運行ocr_view馬上就遇到第一個錯誤:
ModuleNotFoundError: No module named 'ocr_tools'
做了很多嘗試,
反正不是ModuleNotFoundError,就是所需資料檔找不到的FileNotFoundError...
現在已經不太知道怎麼辦了。
我不知道這樣提供的資訊夠不夠?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 203.74.120.191
※ 文章網址: https://www.ptt.cc/bbs/Python/M.1529638467.A.4C2.html
※ 編輯: clsmbstu (203.74.120.191), 06/22/2018 11:36:36
推
06/22 11:56,
6年前
, 1F
06/22 11:56, 1F
→
06/22 11:56,
6年前
, 2F
06/22 11:56, 2F
→
06/22 11:57,
6年前
, 3F
06/22 11:57, 3F
→
06/22 12:31,
6年前
, 4F
06/22 12:31, 4F
→
06/22 12:32,
6年前
, 5F
06/22 12:32, 5F
→
06/22 12:33,
6年前
, 6F
06/22 12:33, 6F
→
06/22 12:34,
6年前
, 7F
06/22 12:34, 7F
→
06/22 12:34,
6年前
, 8F
06/22 12:34, 8F
→
06/22 12:37,
6年前
, 9F
06/22 12:37, 9F
→
06/22 12:39,
6年前
, 10F
06/22 12:39, 10F
→
06/22 12:39,
6年前
, 11F
06/22 12:39, 11F
推
06/22 16:02,
6年前
, 12F
06/22 16:02, 12F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 4 篇):
Python 近期熱門文章
PTT數位生活區 即時熱門文章