virtenv - virtualenv install python3 6



如何讓pip尊重“CC”環境變量 (1)

這聽起來像你在系統B上有編譯器工具,所以一個選擇是使用本地工具在你的系統上重新構建python,然後使用它。

如果你只是在你的系統上為你的用戶做這個,那麼你甚至可以把它安裝在你的用戶的主目錄中,以便完全避免它,然後設置你的環境來使用它。 或者使用virtualenv。

您可以輕鬆獲得併構建新的Python安裝。 例如,對於Linux上的python 3.5.1:

cd
mkdir src
mkdir -p local/python351
cd src
wget https://www.python.org/ftp/python/3.5.1/Python-3.5.1.tgz
tar -xf Python*.tgz
cd Python-3.5.1
./configure --prefix ~/local/python351
make
make install

我在一個非常複雜的環境中工作,不同的機器可以訪問不同的分佈式文件系統。

  • 機器A可以訪問文件系統X ,並用於在文件系統Y上安裝軟件。
  • 機器B可以訪問文件系統Y ,但不能訪問X

我在機器B上工作,我發現自己使用Python很多。 有時候,我需要預裝的軟件包,所以我使用pip install PKGXYZ --user來在本地安裝它們。 這通常很好,但有一個問題。

python軟件包distutils以及由pip使用的monkey- setuptools衍生setuptools使用distutils.sysconfig功能來獲取編譯器版本,路徑等等。 為此,他們使用用於安裝python的內部Makefile 。 雖然這通常是一個很好的策略,但是在我的具體設置中失敗了,因為內部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的編譯器路徑的默認設置和我的機器上可用的東西。

但是,這是一個醜陋的黑客。 必須有一個更好的方法來做到這一點,並通過一些環境變量,配置文件或命令行選項使用一些不同的編譯器。 或者在那裡?





distutils