我有一個可執行的python腳本,它使用pymysql庫存檔來自mysql服務器的數據。該腳本從命令行運行良好。我使用escapeshellcmd函數從php腳本調用此腳本,并且我已經讓它工作了。我還創建了一個bash腳本,我打算從crontab使用它來存檔信息。我也可以通過進行下面概述的更改來使此腳本正常工作。不知何故,我遇到了python版本和路徑問題。如果我包括#!/home/tim/anaconda3/bin/python作為python腳本的第一行,當被php腳本調用時,它可以工作(我相信使用www-data作為用戶)。它無法從 bash 腳本或命令行工作,并給出以下錯誤: File "./signal_archive.py", line 22, in <module> import pymysqlModuleNotFoundError: No module named 'pymysql'但是,如果 python 腳本的第一行如下所示:#!/usr/bin/python3該腳本從 bash 腳本和命令行工作,但不能從 php 腳本工作。它給出以下錯誤: File "/home/tim/python/commodities_related/signal_archive.py", line 23, in <module> import pandas as pdModuleNotFoundError: No module named 'pandas'這兩個軟件包都安裝在我的系統上??紤]到將腳本指向路徑會有所幫助,我將以下內容添加到python腳本中,但到目前為止沒有運氣。sys.path.append('/usr/lib/python3/dist-packages:')sys.path.append('/usr/local/lib/python3.5/dist-packages:')顯然,我錯過了一些東西。我認為是php腳本是由www-user調用的,我不知道默認路徑。bash文件由我的用戶使用.bashrc文件中指定的路徑調用。但是,我可能需要指出apache或php(www-user)才能使用Python的特定安裝。編輯 - 為了更清楚,php腳本(phpfile1.php)調用python腳本。當我從另一個在apache2上運行的php腳本(phpfile2.php)調用phpfile1.php時,我一切都可以使用#!/home/tim/anaconda3/bin/python當我從bash腳本從不同的php腳本(phpfile3.php)調用同一文件(phpfile1.php)時,它會失敗。此外,如果我使用以下命令就地運行該文件./signal_archive.py我收到錯誤,但如果我使用以下命令運行它,它的工作原理:python signal_archive.py任何想法,如果這是正確的或如何做?謝謝。
1 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
我通過2個步驟修復了這個問題:
事實證明,我需要將 anaconda3 的路徑添加到我的.bash_profile文件中。
export PATH="/home/tim/anaconda3/bin:$PATH"
安裝 anaconda3 后,它會使用前面的代碼片段修改 .bashrc 文件。然而,在這種情況下,.bash_profile做出了改變。
我還修改了python文件的頂部,以使用anaconda路徑進行執行,并為特定的python包添加路徑。
#!/home/tim/anaconda3/bin/python
import sys
sys.path.insert(1, '/usr/local/lib/python3.5/dist-packages')
添加回答
舉報
0/150
提交
取消