Если вы не хотите добавлять один метод, как говорит Джаред, вы можете попробовать использовать лямбда
validates :description, presence: true, if: ->{ first_step? || require_validation }
Если пакет находится на PYPI, загрузите его и его зависимости в какой-либо локальный каталог. Например,
$ mkdir /pypi && cd /pypi $ ls -la -rw-r--r-- 1 pavel staff 237954 Apr 19 11:31 Flask-WTF-0.6.tar.gz -rw-r--r-- 1 pavel staff 389741 Feb 22 17:10 Jinja2-2.6.tar.gz -rw-r--r-- 1 pavel staff 70305 Apr 11 00:28 MySQL-python-1.2.3.tar.gz -rw-r--r-- 1 pavel staff 2597214 Apr 10 18:26 SQLAlchemy-0.7.6.tar.gz -rw-r--r-- 1 pavel staff 1108056 Feb 22 17:10 Werkzeug-0.8.2.tar.gz -rw-r--r-- 1 pavel staff 488207 Apr 10 18:26 boto-2.3.0.tar.gz -rw-r--r-- 1 pavel staff 490192 Apr 16 12:00 flask-0.9-dev-2a6c80a.tar.gz
Некоторые пакеты, возможно, придется заархивировать в похожие поисковые файлы вручную. Я делаю это много, когда хочу более новую (менее стабильную) версию чего-то. Некоторые пакеты не относятся к PYPI, поэтому они применимы к ним.
Предположим, что у вас есть правильно сформированное приложение Python в ~/src/myapp
. ~/src/myapp/setup.py
будет иметь список install_requires
, в котором упоминается одна или несколько вещей, которые у вас есть в вашем каталоге /pypi
. Например:
install_requires=[
'boto',
'Flask',
'Werkzeug',
# and so on
Если вы хотите иметь возможность запускать приложение со всеми необходимыми зависимостями, все еще взломав его, вы сделаете что-то вроде этого:
$ cd ~/src/myapp $ python setup.py develop --always-unzip --allow-hosts=None --find-links=/pypi
Таким образом, ваше приложение будет выполнено прямо из вашего исходного каталога. Вы можете взломать вещи, а затем перезапустить приложение, не перестраивая ничего.
Если вы хотите установить приложение и его зависимости в текущую среду python, вы сделаете что-то вроде этого:
$ cd ~/src/myapp $ easy_install --always-unzip --allow-hosts=None --find-links=/pypi .
В обоих случаях сборка завершится с ошибкой, если в каталоге /pypi
нет одной или нескольких зависимостей. Он не будет пытаться беспорядочно устанавливать недостающие вещи из Интернета.
Я настоятельно рекомендую вызывать setup.py develop ...
и easy_install ...
в активной виртуальной среде , чтобы избежать заражения вашего глобального Python Окружающая среда. Это (virtualenv, что есть) в значительной степени путь. Никогда не устанавливайте что-либо в глобальную среду Python.
Если машина, на которой вы создали свое приложение, имеет такую же архитектуру, как и машина, на которой вы хотите ее развернуть, вы можете просто архивировать всю директорию виртуальной среды, в которую вы easy_install
все. Как раз перед тем, как сделать это, вы должны сделать каталог виртуальной среды перемещаемым (см. Опцию - relocatable ). ПРИМЕЧАНИЕ. Конечным машинам должна быть установлена одна и та же версия Python, а также любые зависимости на C, которые могут быть установлены вашим приложением (например, если вы зависите от PIL , а затем libpng, libjpeg и т. д.).
Если вы хотите, чтобы установить python libs и их зависимости в автономном режиме, выполните следующие шаги на машине с такими же os, подключенными к сети, установленными python:
1) Создайте файл requirements.txt
с таким содержимым, как:
Flask==0.12
requests>=2.7.0
scikit-learn==0.19.1
numpy==1.14.3
pandas==0.22.0
2) Выполнить команду mkdir wheelhouse && pip download -r requirements.txt -d wheelhouse
для загрузки libs и их зависимостей в direcotry wheelhouse
3) Скопировать require.txt в каталог wheelhouse
4) Архивируйте рулевую рубку в wheelhouse.tar.gz
с помощью tar -zcf wheelhouse.tar.gz wheelhouse
Затем загрузите wheelhouse.tar.gz
на ваш целевой компьютер:
1) Выполните tar -zxf wheelhouse.tar.gz
, чтобы извлечь файлы
2) Выполните pip install -r wheelhouse/requirements.txt --no-index --find-links wheelhouse
для установки libs и их зависимостей
оффлайн python. для этого я использую virtualenv (изолированная среда Python)
1) установить virtualenv онлайн с помощью pip:
pip install virtualenv --user
или офлайн с whl: перейти к этой ссылке , загрузите последнюю версию (.whl или tar.gz) и установите это с помощью этой команды:
pip install virtualenv-15.1.0-py2.py3-none-any.whl --user
с помощью --user
вам не нужно использовать sudo pip…
.
2) используйте virtualenv
на онлайн-машине, выберите каталог с терминалом cd
и запустите этот код:
python -m virtualenv myenv
cd myenv
source bin/activate
pip install Flask
после установки всех пакетов, вы должны сгенерируйте requirements.txt
, поэтому пока ваш virtualenv активен, напишите
pip freeze > requirements.txt
, откройте новый терминал и создайте еще один env, как myenv2
.
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
ls
теперь вы можете пойти в свою автономную папку, где находятся папки requirements.txt
и tranferred_packages
. загрузите пакеты со следующим кодом и поместите все их в папку tranferred_packages
.
pip download -r requirements.txt
переносите автономную папку на автономный компьютер, а затем
python -m virtualenv myenv2
cd myenv2
source bin/activate
cd -
cd offline
pip install --no-index --find-links="./tranferred_packages" -r requirements.txt
, что находится в папка offline [requirements.txt, tranferred_packages {Flask-0.10.1.tar.gz, ...}]
проверить список вашего пакета
pip list
note: как мы в 2017 году лучше использовать python 3. вы можете создать python 3 virtualenv с помощью этой команды.
virtualenv -p python3 envname
Загрузите tarball , перенесите его на свой компьютер FreeBSD и извлеките его, затем запустите python setup.py install
, и все готово!
EDIT: просто чтобы добавить к этому, вы также можете установить tarballs с помощью pip.
Использование wheel
скомпилированных пакетов.
bundle up:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ pip wheel -r requirements.txt --wheel-dir=$tempdir
$ cwd=`pwd`
$ (cd "$tempdir"; tar -cjvf "$cwd/bundled.tar.bz2" *)
копировать tarball и устанавливать:
$ tempdir=$(mktemp -d /tmp/wheelhouse-XXXXX)
$ (cd $tempdir; tar -xvf /path/to/bundled.tar.bz2)
$ pip install --force-reinstall --ignore-installed --upgrade --no-index --no-deps $tempdir/*
Примечание wheel
двоичный пакеты не находятся между машинами.
. здесь: https://pip.pypa.io/en/stable/user_guide/#installation-bundles
Я использую параметр -d
(или --download
) для pip install
, что делает процесс загрузки sdist tarball из PyPI намного проще. Например, pip install --download /path/to/some/dir celery
загрузит sdist tarballs для сельдерея и все его зависимости к /path/to/some/dir
(но не установит их). Затем вы можете использовать pip install --no-index --find-links /path/to/some/dir/ celery
для установки сельдерея с помощью этих загруженных sdists без доступа к сети.
Тот же процесс работает, если вы замените celery
в обеих командах на -r requirements.txt
, где require.txt файл требований к пунктам, в котором перечислены все нужные вам пакеты (и, возможно, нужные вам версии).
DEPRECATION: pip install --download устарел и будет удалены в будущем. Теперь у команды есть команда download .
Команда такова:
pip download -r requirements.txt
Для python3:
pip3 download -r requirements.txt
--find-links file:/path/to/some/dir/
, и вы должны скачать и установить с той же версией pip - иначе это может быть неудачно
– A. Binzxxxxxx
14 August 2015 в 08:17
Для Pip 8.1.2 вы можете использовать pip download -r requ.txt
для загрузки пакетов на ваш локальный компьютер.
--allow-hosts=None
вы можете использовать переключатель--no-index
– romor 27 May 2015 в 15:46