Je suis ce tutoriel: http://devcenter.heroku.com/articles/Django
À un moment donné, je suis censé faire:
pip freeze > requirements.txt
(Ofc. À partir de l'instance créée par virtualenv de python)
Et je reçois ceci:
(venv)przemoli@ubuntu:~/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
Lors du déploiement sur heroku, il échoue à Brlapi .....
Je vois beaucoup de choses de mon installation principale python qui est sur ubuntu. Ce qui est MAUVAIS depuis Ubuntu utilise python pour pas mal de choses lui-même (ubuntu-one , usb-creator, etc.).
Je n'en ai pas besoin sur heroku! Je n'ai besoin que de Django, psycopg2 et de leurs dépendances. Je ne sais même pas si c'est la faute de pip, ou virutalenv. (Si vous voulez connaître ma configuration, regardez le lien ci-dessus, je l'ai copié dans le terminal)
C'est une chose qui m'a trop énervé. Cela se produit lorsque vous créez un virtualenv sans le --no-site-packages
drapeau.
Il y a quelques choses que vous pouvez faire:
--no-site-packages
drapeau.pip install <name>
directement, à la place, ajoutez la bibliothèque à votre requirements.txt
d'abord, puis installez la configuration requise. Cette opération est plus lente mais garantit que vos exigences sont mises à jour.INSTALLED_APPS
et les adaptateurs de base de données. La plupart des autres bibliothèques requises seront installées automatiquement en raison des dépendances. Je sais que c'est idiot, mais c'est ce que je finis habituellement par faire.-- Éditer --
J'ai depuis écrit un quelques scripts pour aider à gérer cela. Le premier exécute pip freeze et ajoute la bibliothèque trouvée à un fichier d'exigences fourni, l'autre, exécute pip install, puis l'ajoute au fichier d'exigences.
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
}
Si vous vous souciez beaucoup de la propreté de votre requirements.txt
vous ne devez pas seulement utiliser le --no-site-packages
comme déjà mentionné, mais pensez également à ne pas diriger la sortie de pip freeze
directement sur votre requirements.txt
. La raison en est que lorsque vous faites un pip freeze
non seulement les packages spécifiés par vous-même apparaissent, mais aussi les dépendances installées par ces packages! Il n'est pas nécessaire de les conserver tous dans votre requirements.txt
car ils seront installés automatiquement avec le package qui les requiert ... Donc, si vous ajoutez un nouveau package à votre virtualenv, vous devriez probablement simplement ajouter la ligne de ce package à votre requirements.txt
...
Voir cet exemple:
(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
(Bien que je devrais probablement mentionner que dans la plupart des cas, cela ne fera pas de mal que vous ayez ces dépendances là-bas, juste votre fichier augmentera et deviendra plus difficile à maintenir.)
pipreqs
résout le problème. Il génère au niveau du projet fichier required.txt.
pip install pipreqs
pipreqs /path/to/your/project/
le fichier d'exigences serait enregistré dans /path/to/your/project/requirements.txtVous pouvez utiliser les éléments suivants dans votre environnement virtuel
pip freeze -l > requirements.txt
Cela écrira les packages python qui se trouvent uniquement dans votre environnement virtuel.