我正在一個非常複雜的環境中工作,不同的機器可以訪問不同的分佈式文件系統。如何讓pip尊重「CC」環境變量
- 機
A
訪問文件系統X
,用來在文件系統Y
安裝軟件。 - 機器
B
可以訪問文件系統Y
,但不能訪問X
。
我正在使用機器B
,我發現自己使用python很多。有時候,我需要預裝的軟件包,所以我使用pip install PKGXYZ --user
在本地進行安裝。這通常很好,但有一個問題。
的Python包distutils
和猴子打補丁的衍生setuptools
將使用該pip
使用distutils.sysconfig
功能讓編譯器版本,路徑的保持,以及諸如此類。爲此,他們使用用於安裝python的內部Makefile
。雖然這通常是一個很好的策略,但是由於我的具體設置不成功,因爲蟒蛇內部的路徑指向文件系統X
,我無法在我的計算機B
上訪問這些文件系統。因此,我覺得使用pip
的--no-clean
選項和黑客我想用這樣的片段安裝的軟件包的setup.py
自己:
import re
import sys
import os
cc = os.getenv("CC")
if not cc:
print("please set CC environment variable!")
exit(0)
from distutils.sysconfig import get_config_vars
for k,v in get_config_vars().iteritems():
try:
if "fsX" in v:
newv = re.sub(r'/fsX/[^ ]*/g[c+][c+]',cc,v)
get_config_vars()[k] = newv
except TypeError:
pass
,這樣我可以使用CC
環境變量覆蓋的默認設置pythons Makefile
的編譯器路徑與我的機器上可用的東西。
但是,這是一個醜陋的黑客。肯定有更好的方法來做到這一點,並使pip
通過一些環境變量,配置文件或命令行選項使用一些不同的編譯器。或者在那裏?
謝謝你的迴應。雖然構建自定義的python版本肯定是一個選項,但我實際上正在編寫一個依賴於需要由收件人安裝的python包的包,因此我需要爲此問題提供一些易於遵循的說明。在我看來,編譯你自己的python版本對於手頭的問題似乎是過度的。 – carsten
所有收件人都會遇到同樣的問題,他們的python安裝是用現在不可用的工具構建的?這對我來說似乎有點瘋狂,也許如果這是你公司的機器配置方式,你應該着手修復它,因爲看起來你今後可能還會遇到更多的問題。你能不能把這個改變放到預定的python升級版本中? – daphtdazz
是的,所有的收件人都有同樣的問題。是的,這有點瘋狂。是的,正在進行設置的修復,但將採用幾個月的部署順序,而我正在使用的軟件將在幾周內部署。所以我們需要一個工作中間解決方案 – carsten