1. 程式人生 > 其它 >linux執行py檔案,設定預設包搜尋路徑

linux執行py檔案,設定預設包搜尋路徑

一、將寫好的py檔案上傳到linux伺服器上執行,報錯

[root@localhost tcp_check]# python3 TcpClient.py 
Traceback (most recent call last):
  File "TcpClient.py", line 2, in <module>
    from util.Log import logger
ModuleNotFoundError: No module named 'util'
[root@localhost tcp_check]# 

引用自定義的包檔案失敗,提示找不到模組

需要檢視或者設定PYTHONPATH環境變數,是否增加了上傳需要引用的模組的絕對路徑

二、設定PYTHONPATH環境變數

[root@localhost tcp_check]# echo 'export PYTHONPATH=/usr/local/zabbix/scripts'>>/etc/profile 
[root@localhost tcp_check]# source /etc/profile
[root@localhost tcp_check]# echo $PYTHONPATH  
/usr/local/zabbix/scripts
[root@localhost tcp_check]# 

三、執行驗證

[root@localhost tcp_check]# python3 TcpClient.py 
[
'/usr/local/zabbix/scripts/hlsms/qxt/jk/tcp_check', '/usr/local/zabbix/scripts', '/usr/local/python3/lib/python37.zip', '/usr/local/python3/lib/python3.7', '/usr/local/python3/lib/python3.7/lib-dynload', '/usr/local/python3/lib/python3.7/site-packages', '/usr/local/zabbix/scripts'] [root@localhost tcp_check]#

四、總結

1、如果需要匯入的包和匯入包的檔案在同一個目錄下直接import即可

例如b.py需要用a.py的某些程式碼就可以直接import

2、如果匯入的模組是在主程式所在目錄的子目錄下,可以在子目錄中增加一個空白的__init__.py檔案(或者pycham中直接在當前目錄下新建一個package會自動生成__init__.py檔案),該檔案使得python直譯器將子目錄整個也當成一個模組,然後直接通過“import 子目錄.模組”匯入即可

例如b.py需要用c.py的某些程式碼就可以直接import

3.如果匯入的模組是在主程式所在目錄的父目錄下,則要通過修改path來解決,有兩種方法:

(1)通過”import sys,sys.path.append(‘父目錄的路徑’)“來改變,這種方法屬於一次性的,只對當前的python直譯器程序有效,關掉python重啟後就失效了。

(2)直接修改環境變數:在windows中是 “ set 變數=‘路徑’ ” 例如:set PYTHONPATH=‘C:\test…’ 檢視是否設定成功用echo %PYTHONPATH%,而且進到python直譯器中檢視sys.path,會發現已經有了新增加的路徑了。這種方式是永久的,一次設定以後一直都有效。在linux中是 “export 變數=‘路徑’ “,檢視是” echo $變數 "