Определите, работает ли Python внутри virtualenv

Решение без CSS: вы можете использовать эту строку для удаления элементов из DOM:

table.rows[i].removeChild(childNode);

или:

childNode.style = 'display: none'

, чтобы сохранить элементы, но не отображать их.

var tableData = [{
    "Item Code": "1001",
    "Item Name": "Beverages",
    "Selling Price": "65",
    "Quantity": "12"

  },
  {
    "Item Code": "2003",
    "Item Name": "Juices",
    "Selling Price": "75",
    "Quantity": "14"
  },
  {
    "Item Code": "1004",
    "Item Name": "Soups",
    "Selling Price": "689",
    "Quantity": "15"

  },
  {
    "Item Code": "2005",
    "Item Name": "Cookies",
    "Selling Price": "74",
    "Quantity": "17"

  },

]

function addTable(tableData) {
  var col = Object.keys(tableData[0]);
  var countNum = col.filter(i => !isNaN(i)).length;
  var num = col.splice(0, countNum);
  col = col.concat(num);
  var table = document.createElement("table");
  var tr = table.insertRow(-1); // TABLE ROW.
  for (var i = 0; i < col.length; i++) {
    var th = document.createElement("th"); // TABLE HEADER.
    th.innerHTML = col[i];
    tr.appendChild(th);
    tr.classList.add("text-center");
    tr.classList.add("head")
  }
  for (var i = 0; i < tableData.length; i++) {
    tr = table.insertRow(-1);
    for (var j = 0; j < col.length; j++) {
      let tabCell = tr.insertCell(-1);
      var hiddenField = document.createElement("input");
      hiddenField.style.display = "none";
      var tabledata = tableData[i][col[j]];

      if (tableData[i]['Item Code'] === tableData[i][col[j]]) {
        tabCell.innerHTML = tabledata;
        hiddenField.setAttribute('name', 'Item_Code');
        hiddenField.setAttribute('value', tabledata);
        tabCell.appendChild(hiddenField);
      }
      if (tableData[i]['Item Name'] === tableData[i][col[j]]) {
        tabCell.innerHTML = tabledata;
        hiddenField.setAttribute('name', 'Item_Name');
        hiddenField.setAttribute('value', tabledata);
        tabCell.appendChild(hiddenField);
      }
      if (tableData[i]['Selling Price'] === tableData[i][col[j]]) {
        /*  tabCell.innerHTML = tabledata; */ //here i am hiding the selling price in body
        hiddenField.setAttribute('name', 'sellingPrice');
        hiddenField.setAttribute('value', tabledata);
        tabCell.appendChild(hiddenField);
      }
      if (tableData[i]['Quantity'] === tableData[i][col[j]]) {
        var quantityField = document.createElement("input");
        quantityField.style.border = "none";
        quantityField.style["text-align"] = "center";
        quantityField.setAttribute('name', 'Quantity');
        quantityField.setAttribute('value', tabledata);
        quantityField.setAttribute('type', 'number');
        quantityField.classList.add("dataReset");
        tabCell.appendChild(quantityField);
        /* console.log(quantityField) */
      }
      if (j > 1)
        tabCell.classList.add("text-right");
    }
  }
  var divContainer = document.getElementById("HourlysalesSummary");
  divContainer.innerHTML = "";
  divContainer.appendChild(table);
  table.classList.add("table");
  table.classList.add("table-striped");
  table.classList.add("table-bordered");
  table.classList.add("table-hover");
  hideColumn(table, 3)
}
addTable(tableData);

function hideColumn(table, index) {
  for(var i=0;i<table.rows.length;i++){
     const childNode = table.rows[i].childNodes[index - 1];
     //childNode.style = 'display: none'
     table.rows[i].removeChild(childNode);
  }
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/css/bootstrap.min.css">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.2/js/bootstrap.min.js"></script>
<table class="w-100" id=HourlysalesSummary></table>

Решение с использованием css:

table tr th:nth-child(3),
table tr td:nth-child(3){
 display: none;
}
247
задан codeforester 20 December 2017 в 12:28
поделиться

3 ответа

Пока что это выглядит как хороший кандидат для RegEx . Если это станет значительно более сложным, тогда может потребоваться более сложная схема токенизации, но вам следует избегать этого маршрута, если это не необходимо, поскольку это значительно больше работы. (с другой стороны, для сложных схем регулярное выражение быстро превращается в собаку, и его также следует избегать).

Это регулярное выражение должно решить вашу проблему:

("[^"]+"|\w+)\s*

Вот пример его использования на C #:

string data = "the quick \"brown fox\" jumps over the \"lazy dog\"";
string pattern = @"(""[^""]+""|\w+)\s*";

MatchCollection mc = Regex.Matches(data, pattern);
foreach(Match m in mc)
{
    string group = m.Groups[0].Value;
}

Настоящее Преимущество этого метода в том, что его можно легко расширить, включив в него ваше требование «-», например:

string data = "the quick \"brown fox\" jumps over " +
              "the \"lazy dog\" -\"lazy cat\" -energetic";
string pattern = @"(-""[^""]+""|""[^""]+""|-\w+|\w+)\s*";

MatchCollection mc = Regex.Matches(data, pattern);
foreach(Match m in mc)
{
    string group = m.Groups[0].Value;
}

Теперь я ненавижу читать Regex так же сильно, как и другие, но если вы разделите его, это будет довольно легко прочитать:

(
-"[^"]+"
|
"[^"]+"
|
-\w+
|
\w+
)\s*

Пояснение

  1. Если возможно, сопоставьте знак минус, за которым следует " real_prefix не должен существовать.

    Использование переменной среды VIRTUAL_ENV ненадежно. Он устанавливается сценарием оболочки virtualenv activate , но virtualenv можно использовать без активации, напрямую запустив исполняемый файл из виртуального bin / (или Scripts ) каталог, и в этом случае $ VIRTUAL_ENV не будет установлен.

215
ответ дан 23 November 2019 в 03:02
поделиться

Существует несколько хороших ответов здесь и немного меньше устойчивых. Вот обзор.

, Как не сделать это

, не полагаются на местоположении Python или site-packages папка.

, Если они установлены на нестандартные местоположения, который делает не средний, Вы находитесь на самом деле в виртуальной среде. У пользователей может быть больше чем одна версия Python, установленная, и это не всегда, где Вы ожидаете, что они будут.

Стараются не смотреть на:

  • sys.executable
  • sys.prefix
  • pip -V
  • which python

кроме того, не проверяйте на присутствие venv, .venv или envs ни в одном из этих путей. Это повредится для сред с более уникальным местоположением. Например, Pipenv использует значения хэш-функции в качестве названия его сред.

VIRTUAL_ENV переменная среды

И virtualenv и venv установила переменную среды $VIRTUAL_ENV при активации среды. См. PEP 405.

можно считать эту переменную в сценариях оболочки или использовать этот код Python, чтобы определить, установлено ли это.

import os
running_in_virtualenv = "VIRTUAL_ENV" in os.environ

# alternative ways to write this, also supporting the case where
# the variable is set but contains an empty string to indicate
# 'not in a virtual environment':
running_in_virtualenv = bool(os.environ.get("VIRTUAL_ENV"))
running_in_virtualenv = bool(os.getenv("VIRTUAL_ENV"))

проблема, это только работает, когда среда , активировался activate сценарий оболочки.

можно запустить сценарии среды , не активируя среду , поэтому если это - беспокойство, необходимо использовать другой метод.

sys.real_prefix и sys.base_prefix

точки Virtualenv sys.prefix к Python, установленному в virtualenv, как Вы ожидали бы.

В то же время, исходное значение [1 119] также сделано доступным как новый атрибут [1 120]: sys.real_prefix. Это - то, что мы используем, чтобы обнаружить, если мы находимся в virtualenv.

import sys
running_in_virtualenv = hasattr(sys, "real_prefix")

существует проблема хотя: venv и pyvenv делают это по-другому по сравнению с [1 124] - они не устанавливают real_prefix. Вместо этого они устанавливают base_prefix на другое значение от [1 127].

Так для сейфа проверьте обоих, как предложено в [1 130] ответ hroncok :

import sys

virtualenv_prefix = getattr(sys, "real_prefix", None)
venv_prefix = getattr(sys, "base_prefix", sys.prefix)

running_in_virtualenv = virtualenv_prefix or venv_prefix != sys.prefix

Анаконда

при использовании виртуальных сред Anacona проверьте ответ Victoria Stuart .

5
ответ дан 23 November 2019 в 03:02
поделиться

Самый простой способ - просто запустить: which python, если вы находитесь в virtualenv, он будет указывать на своего питона вместо глобального

1
ответ дан 23 November 2019 в 03:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: