Python

詹金斯、Python 和根

  • November 24, 2018

我正在嘗試將 Python unittest 作為 Jenkins 建構的一部分執行。我的建構失敗如下:

+ export PYTHONPATH=/usr/lib/python2.7:/usr/lib/python2.7/dist-packages:/var/lib/jenkins/jobs/GUPS_Unit_Tests/workspace/python/plugins:/var/lib/jenkins/jobs/GUPS_Unit_Tests/workspace/:/usr/share/qgis/python:/usr/share/qgis/python/plugins:/var/lib/jenkins/.qgis2/python/plugins:/var/lib/jenkins/jobs/GUPS_Unit_Tests/workspace/gupsutest
+ export PYTHONHOME=/usr
+ cd gupsutest
+ python -m unittest discover
ImportError: No module named site

事實證明,這是一個文件權限問題。Python 安裝在 /usr/lib/python2.7,當然它是由 root 擁有的。

-rwxrwxr--   1 root root  20388 Jun 22  2015 site.py
-rwxrwxr--   1 root root  19727 Feb  2 07:45 site.pyc

如果我將 jenkins 使用者添加到根組,我可以讓 Python 執行。這在最壞的情況下看起來很危險,在最好的情況下看起來很糟糕。

我該如何進行?我是否將 Python 重新安裝到 /usr/local/lib?我是否在 /usr/lib 中更改 Python 組?我是否允許所有訪問/usr/lib/python2.7?

我正在使用帶有 Python 2.7.6 的 Ubuntu 14.04。還有一點需要考慮,我們正在編寫的 Python 程式碼是用於 QGIS 外掛的。這些也已以 root 身份安裝。我也應該為這些更改組嗎?

編輯:更多資訊。jenkins 使用者設置為系統使用者帳戶。這似乎促成了這個問題。我有一個能夠執行 Python 的普通帳戶 gups(因此可以訪問 /usr/lib/python2.7)。

/etc/組

jenkins:x:125:
gups:x:1000:

/etc/passwd

jenkins:x:116:125:Jenkins,,,:/var/lib/jenkins:/bin/bash
gups:x:1000:1000:GUPS Buildmaster,,,:/home/gups:/bin/bash

EDIT2:python 文件夾權限之間的有趣區別。不知道為什麼 python3.4 和 python2.7 不同。

gups@gups-xxxxxxxxxx:~$ ls -la /usr/lib | grep python
-rw-r--r--   1 root root        68232 Jan 16 20:42 libqgispython.so.2.8.6
drwxrwxr--  26 root root        12288 Feb 12 08:03 python2.7
drwxr-xr-x   3 root root         4096 Feb 23  2014 python3
drwxr-xr-x  33 root root        20480 Feb  4 05:16 python3.4
drwxr-xr-x   2 root root         4096 Feb  3 08:02 python-tz

EDIT3:我一直在研究virtualenv這似乎是一個合適的解決方案。我執行 virtualenv 在我的 jeknins 使用者的主目錄中創建一個環境。

sudo virtualenv --system-site-packages /var/lib/jenkins/_python

這不包括 /usr/lib/python2.7/dist-packages,這是一個問題。

EDIT4:詹金斯包資訊。

gups@gups-Satellite-U925t:~$ sudo dpkg -l | grep jenkins
ii  jenkins                                               1.650                                               all          continuous integration system

Ubuntu 論壇中的文章進行了一些額外的搜尋和一些幫助之後,我發現了解決方案。

正如thrigFaheem Mitha所指出的,我的 python2.7 文件夾的權限實際上很時髦。

我把它們修好了。

sudo chmod 755 /usr/lib/python2.7
sudo find /usr/lib/python2.7 -type d -exec chmod 755 {} \;
sudo find /usr/lib/python2.7/*.py -exec chmod 644 {} \;

我在這個 stackexchange文章中找到的。

引用自:https://unix.stackexchange.com/questions/266582