- 開發(fā)工具pycharm
- 運行方式
- pycharm右鍵運行
- python命令執(zhí)行
-
項目目錄結構
cloud_platform - 代碼
import os
import sys
from test import a
a.test()
- 問題
Traceback (most recent call last):
File "monitor_yarn/aa.py", line 1, in <module>
from test import a
ImportError: cannot import name a
- 在pycharm中右鍵運行沒問題剩晴,但是去服務器直接用python命令去直接執(zhí)行就會報上面的錯誤
- 這是因為在用python命令執(zhí)行時test包默認沒有引入到sys.path中
- 繼續(xù)看代碼
import os
import sys
for i in sys.path:
print i
from test import a
a.test()
#輸出
/Users/wangtaiyang/PycharmProjects/cloud_platform_script/monitor_yarn
/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/yarn_api_client-0.3.1-py2.7.egg
- 看上面打印信息可以看到并沒有test這個包的路徑较木,而用pycharm右鍵運行項目時几迄,打颖眚:
/Users/wangtaiyang/PycharmProjects/cloud_platform_script/monitor_yarn
/Users/wangtaiyang/PycharmProjects/cloud_platform_script
/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages
/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/yarn_api_client-0.3.1-py2.7.egg
/Applications/PyCharm.app/Contents/helpers/pycharm_matplotlib_backend
test
- 可以看到是有當前運行的文件的路徑 And 這個項目的根路徑
- 解決方法
- 三種解決方法
- 在/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages下添加一個xx.pth,xx是要導入的模塊名乓旗,然后寫上本地項目路徑府蛇,這種方法在換一個環(huán)境用時太麻煩,不推薦
- 將包的路徑添加到sys.path中
#sys.py文件中屿愚,sys.path就是一個列表
path = [
'/Applications/PyCharm.app/Contents/helpers',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python27.zip',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-darwin',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/plat-mac/lib-scriptpackages',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-tk',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-old',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/lib-dynload',
'/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages',
]
#在自己代碼中向path列表中添加要導入的包的路徑
os.sys.path.append('/Users/wangtaiyang/PycharmProjects/cloud_platform_script/test')
這種方式每個文件都需要添加汇跨,也很麻煩
- 添加PYTHONPATH環(huán)境變量(推薦)
export PYTHONPATH=/Users/wangtaiyang/PycharmProjects/cloud_platform_script/monitor_yarn
- 這種方式也是我最喜歡的方式,換了執(zhí)行環(huán)境妆距,只需配置一條環(huán)境變量而已穷遂,比起上面兩種方式要方便的多
總結
pycharm中運行代碼,它自動就為你設置好了項目的路徑到sys.path中娱据,而我們的項目往往要到服務器運行蚪黑,而在用python命令執(zhí)行時,項目的路徑需要我們自己配置