Подтвердить что ты не робот

Из virtualenv, pip freeze> requirements.txt дают ТОНЫ мусора! Как обрезать его?

Я следую этому руководству: http://devcenter.heroku.com/articles/django

В какой-то момент я понимаю:

pip freeze > requirements.txt

(Ofc. из virtualenv созданного экземпляра python)

И я получаю это:

(venv)[email protected]:~/Programowanie/hellodjango$ cat requirements.txt 
BeautifulSoup==3.2.0
Brlapi==0.5.5
CherryPy==3.1.2
ClientForm==0.2.10
Django==1.3
GnuPGInterface==0.3.2
PAM==0.4.2
PIL==1.1.7
Routes==1.12.3
Twisted-Core==11.0.0
Twisted-Names==11.0.0
Twisted-Web==11.0.0
WebOb==1.0.8
adium-theme-ubuntu==0.3.1
apt-xapian-index==0.44
apturl==0.5.1ubuntu1
chardet==2.0.1
command-not-found==0.2.44
configglue==1.0
cssutils==0.9.8a1
defer==1.0.2
distribute==0.6.19
django-tagging==0.3.1
dnspython==1.9.4
duplicity==0.6.15
gnome-app-install==0.4.7-nmu1ubuntu2
httplib2==0.7.2
jockey==0.9.4
keyring==0.6.2
launchpadlib==1.9.8
lazr.restfulclient==0.11.2
lazr.uri==1.0.2
louis==2.3.0
lxml==2.3
mechanize==0.1.11
nvidia-common==0.0.0
oauth==1.0.1
onboard==0.96.1
oneconf==0.2.6.7
papyon==0.5.5
pexpect==2.3
piston-mini-client==0.6
protobuf==2.4.0a
psycopg2==2.4.4
pyOpenSSL==0.12
pycrypto==2.3
pycups==1.9.59
pycurl==7.19.0
pyinotify==0.9.1
pyparsing==1.5.2
pyserial==2.5
pysmbc==1.0.10
python-apt==0.8.0ubuntu9
python-dateutil==1.4.1
python-debian==0.1.20ubuntu2
python-virtkey==0.60.0
pyxdg==0.19
sessioninstaller==0.0.0
simplejson==2.1.6
system-service==0.1.6
ubuntu-sso-client==1.4.0
ubuntuone-couch==0.3.0
ubuntuone-installer==2.0.0
ubuntuone-storage-protocol==2.0.0
ufw==0.30.1-2ubuntu1
unattended-upgrades==0.1
usb-creator==0.2.23
virtualenv==1.6.4
wadllib==1.2.0
wsgiref==0.1.2
xdiagnose==1.1
xkit==0.0.0
zope.interface==3.6.1

При развертывании на героку он терпит неудачу в Brlapi.....

Я вижу много вещей из моей основной установки python, которая находится на ubuntu. Что плохо, поскольку Ubuntu использует python для нескольких вещей (ubuntu-one, usb-creator и т.д.).

Мне они не нужны на героку! Мне нужно только Django, psycopg2 и их зависимости. Я даже не знаю, виновата ли его ошибка, или вирутален. (Если вы хотите узнать, как моя установка просматривает ссылку выше, я скопировал ее в терминал)

4b9b3361

Ответ 1

Это одна вещь, которая слишком сильно подслушивала меня. Это происходит, когда вы создаете virtualenv без флага --no-site-packages.

Есть несколько вещей, которые вы можете сделать:

  • Создать virtualenv с флагом --no-site-packages.
  • При установке приложений не запускайте pip install <name> напрямую, вместо этого сначала добавьте библиотеку в свой requirements.txt, а затем установите требования. Это происходит медленнее, но гарантирует, что ваши требования будут обновлены.
  • Вручную удалять библиотеки, которые вам не нужны. Следующее правило для этого - добавить все, что есть в моих адаптерах INSTALLED_APPS и базы данных. Большинство других требуемых библиотек будут автоматически установлены из-за зависимостей. Я знаю его глупо, но это то, что я обычно делаю.

- Изменить -

С тех пор я написал пару скриптов, чтобы справиться с этим. Первый запускает pip freeze и добавляет найденную библиотеку к предоставленному файлу требований, а другой запускает установку pip, а затем добавляет ее в файл требований.

function pipa() {
    # Adds package to requirements file.
    # Usage: pipa <package> <path to requirements file>
    package_name=$1
    requirements_file=$2
    if [[ -z $requirements_file ]]
    then
        requirements_file='./requirements.txt'
    fi
    package_string=`pip freeze | grep -i $package_name`
    current_requirements=`cat $requirements_file`
    echo "$current_requirements\n$package_string" | LANG=C sort | uniq > $requirements_file
}

function pipia() {
    # Installs package and adds to requirements file.
    # Usage: pipia <package> <path to requirements file>
    package_name=$1
    requirements_file=$2
    if [[ -z $requirements_file ]]
    then
        requirements_file='./requirements.txt'
    fi
    pip install $package_name
    pipa $package_name $requirements_file
}

Ответ 2

Если вы заботитесь о чистоте вашего requirements.txt, вы должны использовать не только параметр --no-site-packages, как уже упоминалось, но также подумайте о том, чтобы не транслировать вывод pip freeze прямо на ваш requirements.txt. Причиной этого является то, что при выполнении pip freeze отображаются не только указанные вами пакеты, но и зависимости, установленные этими пакетами! Нет необходимости хранить их в своем requirements.txt, поскольку они автоматически устанавливаются с пакетом, который требует их... Поэтому, если вы добавите новый пакет в свой virtualenv, вы, вероятно, должны просто добавить строку для этого пакета в свой requirements.txt...

См. этот пример:

(demo)[~]$ pip freeze
distribute==0.6.19
wsgiref==0.1.2
(demo)[~]$ pip install django-blog-zinnia
Downloading/unpacking django-blog-zinnia
  Downloading django-blog-zinnia-0.9.tar.gz (523Kb): 523Kb downloaded
  Running setup.py egg_info for package django-blog-zinnia

    no previously-included directories found matching 'docs/api'
    no previously-included directories found matching 'docs/build'
    no previously-included directories found matching 'docs/coverage'
    no previously-included directories found matching 'zinnia/media/zinnia/css/.sass-cache'
Downloading/unpacking BeautifulSoup>=3.2.0 (from django-blog-zinnia)
  Downloading BeautifulSoup-3.2.1.tar.gz
  Running setup.py egg_info for package BeautifulSoup

  # truncated as it installs some more dependencies
Successfully installed django-blog-zinnia BeautifulSoup django-mptt django-tagging django-xmlrpc pyparsing
Cleaning up...
(demo)[~]$ pip freeze
BeautifulSoup==3.2.1
distribute==0.6.19
django-blog-zinnia==0.9
django-mptt==0.5.2
django-tagging==0.3.1
django-xmlrpc==0.1.3
pyparsing==1.5.6
wsgiref==0.1.2

(Хотя я, вероятно, должен был упомянуть, что в большинстве случаев это не повредит тем, что у вас есть эти зависимости там, только ваш файл будет расти и будет сложнее поддерживать.)

Ответ 3

pipreqs решает проблему. Он генерирует файл уровня проекта..

  • Установить pipreqs: pip install pipreqs
  • Сгенерировать файл требования .txt на уровне проекта: pipreqs /path/to/your/project/ файл требований будет сохранен в /path/to/your/project/requirements.txt

Ответ 4

У меня то же самое, когда я использую команду pip3 freeze в virtualenv. Но все работает в pip freeze

Я деактивирую свой virtualenv и обновляю virtualenv. И использую pip3 install virtualenv чтобы убедиться, что мой virtualenv работает на pip или pip3.

Ответ 5

Вы можете использовать следующее в вашей виртуальной среде

pip freeze -l > requirements.txt

Это напишет пакеты Python, которые находятся только в вашей виртуальной среде.