python导入模块不在同一文件夹下_Python小技之自定义不同文件夹下模块导入问题...
一般在寫一個項目的時候,?為了將項目模塊化, 更加的清晰明了, 會將不同功能的模塊放入不同的文件夾
項目如下:
├── spider│?? └── spider.py # 爬蟲文件└── utils├── __init__.py└── downloads.py # 下載模塊
downloads.py內容如下:
def download():print("import?download")
spider.py內容如下:
from ..utils.downloads import downloaddownload()
一切看起來都是那么美好
當你試圖運行
問題一出現:
cd spiderpython3 spider.py
會得到:
# 相對導入超出頂級包錯誤Traceback (most recent call last):File "spider.py", line 7, in from ..utils.downloads import downloadValueError:?attempted?relative?import?beyond?top-level?package
但是你試圖把相對路徑去掉時, 又會得到:
#?找不到這個模塊ModuleNotFoundError: No module named 'utils'
嘗試解決:
在spider.py文件第一行加入:
import syssys.path.append("../")
輸出:
> import download
問題二:
mgd, 終于解決了,
but, 一般爬蟲腳本,?要用crontab或其他定時調用腳本時, 要使用絕對路徑
在根目錄或家目錄下試一下:
python3 /Users/msw/Desktop/wx_post/py_module/spider/spider.py
結果, 不出意外, 咦~~~~~~~
Traceback (most recent call last):File "/Users/msw/Desktop/wx_post/py_module/spider/spider.py", line 9, in from utils.downloads import downloadModuleNotFoundError: No module named 'utils'
于是:
在spider.py再加入一行
sys.path.append("/Users/msw/Desktop/wx_post/py_module/")
在運行一下:
> import?download
果然可以了, 但是不能把所有的路徑都添加一邊吧,?大神到這步應該就知道怎么解決了吧
解決:
其實, 說來說去,?根本問題就是腳本工作目錄的問題,?也就是在那里啟用的腳本
方案一:
改變目錄結構, 內容保持一致, 如下:
├── spider.py└── utils├── __init__.py└── downloads.py
spider.py, 內容如下:
from utils.downloads import downloaddownload()
方案二:
目錄結構保持不變
在spider/spider.py,?開始處加上以下內容:
import osimport syswork_dir, file_name = os.path.split(__file__)os.chdir(work_dir if work_dir else "./")sys.path.append("../")
其實就是改變了, 腳本工作目錄
喜歡麻煩點個在看哦!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python导入模块不在同一文件夹下_Python小技之自定义不同文件夹下模块导入问题...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中去除字符串中首尾空格的函数
- 下一篇: python判断题题库大数据技术_智慧树