Установка PHP Включает Путь в на основание сайта?

Устаревшая опция low_memory

Параметр low_memory устарел неправильно, но он должен быть, поскольку он фактически не делает ничего по-другому [ source ]

Причина, по которой вы получаете это предупреждение low_memory, состоит в том, что угадывание dtypes для каждого столбца очень требует памяти. Pandas пытается определить, какой dtype задавать, анализируя данные в каждом столбце.

Dtype Guessing (очень плохо)

Pandas может определять только то, что должен иметь столбец dtype после всего файла читается. Это означает, что ничего не может быть проанализировано до того, как весь файл будет прочитан, если вы не рискуете изменить dtype этого столбца при чтении последнего значения.

Рассмотрим пример одного файла с столбцом user_id , Он содержит 10 миллионов строк, где user_id всегда является числом. Поскольку панды не могут знать, что это только цифры, это, вероятно, сохранит их как исходные строки, пока не прочитает весь файл.

Задание типов dtypes (всегда должно быть сделано)

/ g15]

dtype={'user_id': int}

к вызову pd.read_csv() заставит pandas знать, когда он начнет считывать файл, что это только целые числа.

Также стоит отметить что если бы последняя строка в файле имела бы "foobar", записанную в столбце user_id, загрузка была бы сбой, если указан указанный выше тип dtype.

Пример разбитых данных, которые ломаются, когда определены типы dtypes

import pandas as pd
from StringIO import StringIO


csvdata = """user_id,username
1,Alice
3,Bob
foobar,Caesar"""
sio = StringIO(csvdata)
pd.read_csv(sio, dtype={"user_id": int, "username": object})

ValueError: invalid literal for long() with base 10: 'foobar'

dtypes, как правило, многозначительные вещи, подробнее о них здесь: http://docs.scipy.org/doc/numpy/reference/generated/numpy.dtype.html

Какие существуют типы dtypes?

Это numpy dtypes, которые также принимаются в pandas

[numpy.generic,
 [[numpy.number,
   [[numpy.integer,
     [[numpy.signedinteger,
       [numpy.int8,
        numpy.int16,
        numpy.int32,
        numpy.int64,
        numpy.int64,
        numpy.timedelta64]],
      [numpy.unsignedinteger,
       [numpy.uint8,
        numpy.uint16,
        numpy.uint32,
        numpy.uint64,
        numpy.uint64]]]],
    [numpy.inexact,
     [[numpy.floating,
       [numpy.float16, numpy.float32, numpy.float64, numpy.float128]],
      [numpy.complexfloating,
       [numpy.complex64, numpy.complex128, numpy.complex256]]]]]],
  [numpy.flexible,
   [[numpy.character, [numpy.bytes_, numpy.str_]],
    [numpy.void, [numpy.record]]]],
  numpy.bool_,
  numpy.datetime64,
  numpy.object_]]

Pandas также добавляет два типа dtypes: categorical и datetime64[ns, tz], которые недоступны в numpy

Ссылка на pandas dtype

Gotchas, оговорки, примечания

Settin g dtype=object отключит вышеуказанное предупреждение, но не сделает его более эффективным с точки зрения памяти, только эффективно.

Настройка dtype=unicode ничего не сделает, поскольку до numpy, unicode представленный как object.

Использование преобразователей

@sparrow правильно указывает на использование преобразователей, чтобы избежать взрыва панд при столкновении 'foobar' в столбце, указанном как int , Я хотел бы добавить, что преобразователи действительно тяжелы и неэффективны для использования в пандах и должны использоваться в качестве последнего средства. Это связано с тем, что процесс read_csv представляет собой один процесс.

Файлы CSV могут обрабатываться по строкам и, следовательно, могут быть обработаны несколькими преобразователями параллельно более эффективно, просто разбивая файл на сегменты и запуская несколько процессов, то, что панды не поддерживают. Но это совсем другая история.

18
задан T.Rob 28 November 2011 в 02:56
поделиться

7 ответов

Если Вы используете апача в качестве веб-сервера, можно переопределить (при разрешении его), настройки с помощью .htaccess файлы. См. руководство PHP для деталей.

В основном Вы помещаете файл, названный .htaccess в Вашем корне веб-сайта, который содержит некоторые значения PHP ini. Если Вы настроили Apache для разрешения переопределений, этот сайт будет использовать все значения в конфигурации PHP, + значения, которые Вы указываете в файл .htaccess .

Может использоваться только с PHP_INI_ALL и PHP_INI_PERDIR директивы типа

, как указано в странице, которую я связал. Если Вы нажимаете до полного списка, Вы видите, что включать путь PHP_INI_ALL директива.

16
ответ дан 30 November 2019 в 07:50
поделиться

Erik Van Brakel дал, по моему скромному мнению, один из лучших ответов.

[еще 111], если Вы используете Apache & Виртуальные хосты, можно настроить, включает непосредственно в них. Используя этот метод, Вы не должны будете помнить оставлять команды php_admin в своем .htaccess.

7
ответ дан 30 November 2019 в 07:50
поделиться

Можно установить include_path в файле php.ini также. Я - парень жемчуга, таким образом, я ожидаю мочь загрузиться, включает, и имейте include, делают правильную вещь. У меня есть все, что мой включает в определенный каталог, который добавляется к include_path. Я могу сделать вещи как

require_once "ClassName.php";

, я не должен волноваться об относительных путях или местоположениях файлов.

я также записал свое собственное CustomRequire, чтобы сделать вещи как

function CustomRequire ($file) {
    if(defined('MYINCLUDEPATH')) {
        require_once MYINCLUDEPATH . "/$file";
    } else {
        require_once $file;
    }
}

Тот способ, которым я могу измениться, как я делаю включает позднее. Конечно, все еще необходимо найти способ включать Ваш включать код :)

0
ответ дан 30 November 2019 в 07:50
поделиться

В зависимости от того, как настраивается Ваш хост, Вам можно разрешить поместить php.ini файл в корне Вашего корневого каталога с дополнительными конфигурационными директивами.

1
ответ дан 30 November 2019 в 07:50
поделиться

Используйте php.ini файл в веб-сайте корень , если Ваша установка использует PHP в качестве CGI (самый частый случай на общих хостах) с тем же синтаксисом как всего сервера php.ini ; выразитесь в .htaccess, если у Вас есть PHP как модуль Apache (сделайте phpinfo() если не уверенный):

php_value include_path "wherever"

Примечание, что на папку php.ini does не влияние подпапки .

4
ответ дан 30 November 2019 в 07:50
поделиться

Ваше приложение должно иметь файл конфигурации, написанный на PHP. Затем включите это с соответствующей страницей в каждую страницу в программе. Этот конфигурационный файл будет иметь переменную для пути к каталогу include, каталогу шаблонов, каталогу изображений и т. Д.

1
ответ дан 30 November 2019 в 07:50
поделиться

Почему вы думаете, что добавление для включения пути является плохой практикой?

Этот код в верхней части корневого скрипта не должен быть таким уж плохим...

$path = '/path/to/site/includes/';
set_include_path($path . PATH_SEPARATOR . get_include_path());

ИМХО главное преимущество в том, что он переносим и совместим не только с Apache

РЕДАКТИРОВАТЬ: я видел недостаток этого метода: маленький влияние производительности. см. http://www.geeksengine.com/article/php-include-path.html

3
ответ дан 30 November 2019 в 07:50
поделиться
Другие вопросы по тегам:

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