pip install requirements.txt issue when deploying Django app on Heroku - python

I am trying to deploy my django app on Heroku using the following guidance: https://devcenter.heroku.com/articles/deploying-python. I reached the point where I have to create and populate the "requirements.txt" file with the following command:
$ pip install -r requirements.txt
However, I get the following error message
You must give at least one requirement to install (see "pip help install")
I tried two other commands
$ pip install -r requirements.txt requirements.txt
$ pip install --allow-all-external requirements.txt
but in both cases I get the following error
Collecting requirements.txt
/home/bastien/python/framework/scrapping/venv/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/home/bastien/python/framework/scrapping/venv/local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.org/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Could you please tell me where the issue is coming from, how I can resolve it using the appropriate command lines or if there is a way to populate the requirements.txt file in any other way? Thanks.

pip install -r requirements.txt does not populate requirements.txt - it reads it as the source of names of packages to install. See https://pip.pypa.io/en/stable/user_guide/#requirements-files for further details.
To capture your current installed package list to a requirements.txt, try pip freeze > requirements.txt.

Related

How can I have pip ignore all of the sub dependencies of a single dependency in a requirements.txt file?

I'm using python's virtual environment (python3 -m venv venv) and pip with requirements.txt. I need to use a package (python-particle) which has a dependency on a very old version of requests (2.7.0). I want to use a more recent version of requests (2.25.0 or later), but because python-particle is explicitly calling out "requests==2.7.0" I get an error when trying to use a later version of requests.
Is there a way to tell pip that the user requested version takes priority?
Alternatively, is there a way to tell pip to do dependency resolution for all packages except one?
Things I've tried...
I saw:
setup.py & pip: override one of the dependency's sub-dependency from requirements.txt
$ more requirements.txt
pexpect>=3.3
python-dateutil>=2.4.2
pytz>=2015.4
six>=1.15.0
python-particle>=0.2
$ more constraints.txt
requests>=2.25.0
but when I tried that I still got the error:
ERROR: Cannot install -r requirements.txt (line 5) because these package versions have conflicting dependencies.
The conflict is caused by:
python-particle 0.2 depends on requests==2.7.0
The user requested (constraint) requests>=2.25.0
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies
The version of pip that I'm using is:
$ pip --version
pip 21.3.1 from /home/xyzzy/src/tools/venv/lib/python3.9/site-packages/pip (python 3.9)
I also tried using --no-deps for just the one dependency (python-particle), but that didn't work. My requirements.txt for this attempt:
pexpect>=3.3
python-dateutil>=2.4.2
pytz>=2015.4
requests>=2.25.0
six>=1.15.0
python-particle>=0.2 --install-option="--no-deps"
The error message from pip:
ERROR: Cannot install -r requirements.txt (line 6) and requests>=2.25.0 because these package versions have conflicting dependencies.
The conflict is caused by:
The user requested requests>=2.25.0
python-particle 0.2 depends on requests==2.7.0
To fix this you could try to:
1. loosen the range of package versions you've specified
2. remove package versions to allow pip attempt to solve the dependency conflict
ERROR: ResolutionImpossible: for help visit https://pip.pypa.io/en/latest/user_guide/#fixing-conflicting-dependencies
Maybe use the --no-deps flag to install particle and then install the rest of requirements.txt normally?
pip install python-particle>=0.2
pip uninstall requests
pip install -r requirements.txt (after removing python-particle from this file)
With this method you will need to install every particle dependency other than requests yourself, or you can try this
pip install python-particle>=0.2
pip uninstall requests
pip install -r requirements.txt (again, no particle in this file)

pip install installations failed [duplicate]

I am trying to install a Python library using pip, getting an SSL error:
~/projects/base  pre-master± pip install xdict
Collecting xdict
Could not fetch URL https://pypi.python.org/simple/xdict/: There was a problem confirming the ssl certificate: [SSL: TLSV1_ALERT_PROTOCOL_VERSION] tlsv1 alert protocol version (_ssl.c:590) - skipping
Could not find a version that satisfies the requirement xdict (from versions: )
No matching distribution found for xdict
pip version: pip 9.0.1
How do I fix this error?
Upgrade pip as follows:
curl https://bootstrap.pypa.io/get-pip.py | python
Note: You may need to use sudo python above if not in a virtual environment.
(Note that upgrading pip using pip i.e pip install --upgrade pip will also not upgrade it correctly. It's just a chicken-and-egg issue. pip won't work unless using TLS >= 1.2.)
As mentioned in this detailed answer, this is due to the recent TLS deprecation for pip. Python.org sites have stopped support for TLS versions 1.0 and 1.1.
From the Python status page:
Completed - The rolling brownouts are finished, and TLSv1.0 and
TLSv1.1 have been disabled. Apr 11, 15:37 UTC
For PyCharm (virtualenv) users:
Run virtual environment with shell. (replace "./venv/bin/activate" to your own path)
source ./venv/bin/activate
Run upgrade
curl https://bootstrap.pypa.io/get-pip.py | python
Restart your PyCharm instance, and check your Python interpreter in Preference.
But if the curl command itself fails with error, or "tlsv1 alert protocol version" persists even after upgrading pip, it means your operating system's underlying OpenSSL library version<1.0.1 or Python version<2.7.9 (or <3.4 in Python 3) do not support the newer TLS 1.2 protocol that pip needs to connect to PyPI since about a year ago. You can easily check it in Python interpreter:
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 0.9.8o 01 Jun 2010'
>>> ssl.PROTOCOL_TLSv1_2
AttributeError: 'module' object has no attribute 'PROTOCOL_TLSv1_2'
The AttributeError (instead of expected '5') means your Python stdlib ssl module, compiled against old openssl lib, is lacking support for the TLSv1.2 protocol (even if the openssl library can or could be updated later).
Fortunately, it can be solved without upgrading Python (and the whole system), by manually installing extra Python packages -- the detailed step-by-step guide is available here on Stackoverflow.
Note, curl and pip and wget all depend on the same OpenSSL lib for establishing SSL connections (use $ openssl version command). libcurl supports TLS 1.2 since curl version 7.34, but older curl versions should be able to connect if you had OpenSSL version 1.0.2 (or later).
P.S.
For Python 3, please use python3 and pip3 everywhere (unless you are in a venv/virtualenv), including the curl command from above:
$ curl https://bootstrap.pypa.io/get-pip.py | python3 --user
Following #Anupam's answer on OS X resulted in the following error for me, regardless of permissions I ran it with:
Could not install packages due to an EnvironmentError: [Errno 13] Permission denied: ...
What eventually worked was to download a newer pip package (9.0.3) from PyPI directly from my browser - https://pypi.org/simple/pip/, extract the contents, and then pip install the package locally:
pip install ./pip-9.0.3/
This fixed my [SSL: TLSV1_ALERT_PROTOCOL_VERSION] errors.
#Anupam's solution worked for me. However, I had to use sudo and specify the exact location of my virtual Python environment:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
To upgrade the local version I used a slight variant:
curl https://bootstrap.pypa.io/get-pip.py | python - --user
This problem arises if you keep your pip and packages under your home directory as described in this gist.
The following solution worked for me:
brew install python2
It also upgraded pip to version 1.10.1
Check your TLS version:
python2 -c "import urllib2,json; print(json.loads(urllib2.urlopen('https://www.howsmyssl.com/a/check').read())['tls_version'])"
If your TLS version is less than 1.2 you have to upgrade it since the PyPI repository is on a brownout period of deprecating early TLS.
Source - Time To Upgrade Your Python: TLS v1.2 Will Soon Be Mandatory
You can upgrade the TLS version using the following command:
sudo apt-get update && sudo apt-get install openssl libssl-dev
This should fix your problem.
Good luck!
EDIT:
You can download packages using your own private python package repository regardless of TLS version.
Private Python Package Repository
For all the python3 and pip3 users out there:
curl https://bootstrap.pypa.io/get-pip.py | sudo python3
and then assume you want to install pandas
pip3 install pandas --user
This worked for me. Add sudo before python
curl https://bootstrap.pypa.io/get-pip.py |sudo python
For Python2 WIN10 Users:
1.Uninstall python thoroughly ,include all folders.
2.Fetch and install the lastest python-2.7.msi (ver 2.7.15)
3.After step 2,you may find pip had been installed too.
4.Now ,if your system'env haven't been changed,you can use pip to install packages now.The "tlsv1 alert protocol version" will not appear.
I tried all existing fixes and not working for me
I re-install python 2.7 (will also install pip) by downloading .pkg at https://www.python.org/downloads/mac-osx/
works for me after installation downloaded pkg
I ran into this problem as well. The underlying problem is that the ssl library in Python 2.7 versions < 2.7.9 is no longer compatible with the pip mechanism.
If you are running on Windows, and you (like us) can't easily upgrade from an incompatible version of 2.7, FWIW, I found that if you copy the following files from another install of the latest version of Python (e.g. Python 2.7.15) on another machine to your installation:
Lib\ssl.py
libs\_ssl.lib
DLLs\_ssl.dll
it will effectively "upgrade" your SSL layer to one which is supported; we were then be able to use pip again, even to upgrade pip.
The answers of installing pip via:
curl https://bootstrap.pypa.io/get-pip.py |sudo python or
curl https://bootstrap.pypa.io/get-pip.py | python
did not work for me as I kept on getting the error:
Could not fetch URL https://pypi.org/simple/pip/: There was a problem confirming the ssl certificate: HTTPSConnectionPool(host='pypi.org', port=443): Max retries exceeded with url: /simple/pip/ (Caused by SSLError("Can't connect to HTTPS URL because the SSL module is not available.",)) - skipping
ERROR: Could not find a version that satisfies the requirement pip (from versions: none)
ERROR: No matching distribution found for pip
I had to install pip manually via:
Go the pip distribution website
Download the tar.gz version
Unpack the file locally and cd into the directory
run python setup.py install
This worked for me, I installed latest version of pip and then installed the library (ciscoconfparse).
Upgrading pip:
curl https://bootstrap.pypa.io/get-pip.py | sudo /Users/{your user name}/{path to python}/bin/python
myenv:
python 2.7.14
pip 9.0.1
mac osx 10.9.4
mysolution:
download get-pip.py manually from https://packaging.python.org/tutorials/installing-packages/
run python get-pip.py
refs:
https://github.com/pypa/warehouse/issues/3293#issuecomment-378468534
https://packaging.python.org/tutorials/installing-packages/
Securely Download get-pip.py [1]
Run python get-pip.py. [2] This will install or upgrade pip. Additionally, it will install setuptools and wheel if they’re not installed already.
Ensure pip, setuptools, and wheel are up to date
While pip alone is sufficient to install from pre-built binary archives, up to date copies of the setuptools and wheel projects are useful to ensure you can also install from source archives:
python -m pip install --upgrade pip setuptools wheel
I also hit this problem on my windows10 and tried all the answers but didn't solve my problem.
C:\python367\Scripts>pip install Flask
Collecting Flask Could not find a version that satisfies the
requirement Flask (from versions: ) No matching distribution found for
Flask
After that, I find the pip configuration file had been modified. So, I set the pip.ini as the original default configuration, re-run the pip command and it works for me!
In summary of the solution of mine:
Check the pip.ini (usually under the path C:\ProgramData\pip) had been modified;
If yes in step1, try to reset it to a default configuration.
Or simply the required library just isn't in the repo. I'm Python newbie and all advices about upgrading pip finally shown as misleading. I had just to look into https://pypi.org/ , finding the library (airflow in my case) stopped at some old version, after which it was renamed. Yes, also that silly solution is also possible :-).

Trying to install package to my home directory results in error

I'm using Amazon Linux. I don't have sudo and want to install a package to my home direcotry. So I'm trying the below, but getting the error,
"No matching distribution found for awscii"
[myuser#mymachine ~]$ pip install --user awscii
DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop support for Python 2.6
Collecting awscii
/home/myuser/.local/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/home/myuser/.local/lib/python2.6/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Could not find a version that satisfies the requirement awscii (from versions: )
No matching distribution found for awscii
[myuser#mymachine ~]$
What is the proper way to install a python package to my home directory?
The default ec2-user has sudo privileges so you should be able to upgrade your python version
$ sudo yum update
I think this only should even upgrade you to python27.
If not if you want to install python 27
$ sudo yum install python27
If you want to install python 3
$ sudo yum install python34

Vagrant Up: InsecurePlatformWarning

I'm trying to do vagrant up but keep running into this error:
==> default: IOError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/_billiard.so'
==> default: /usr/local/lib/python2.7/dist-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
==> default: InsecurePlatformWarning
The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.
I did install urllib3[secure] and built cryptography as the documentation says, but no luck with that.
Working from Ubuntu 16.04
Vagrant version --> 1.9.3
Just in case, VirtualBox version --> 5.1.20r114628
Also i'd rather avoid doing sudo vagrant up as I have read several times it is not recommended. I'm fairly new to this and don't want to mess up a lot.
UPDATE: i have already tried installing requests[security] as I read on a similar thread, but did not solve the issue...
UPDATE: also tried following this thread -->
InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately but not working either
Try upgrade python modules
sudo pip install pyOpenSSL cryptography idna certifi --upgrade
sudo pip install urllib3[secure] --upgrade
sudo pip install requests[security] --upgrade

Cannot upgrade PIP in virtual environment

I am trying to upgrade pip in a virtual environment. I am using the venvburrito wrapper, in an ubuntu 14.04 machine. When I try to update it I get the following error:
(virtual_env) ubuntu#ip-xxxxxxx:~$ pip install pip --upgrade
Collecting pip
Using cached pip-9.0.1-py2.py3-none-any.whl
Installing collected packages: pip
Found existing installation: pip 8.1.2
Not uninstalling pip at /home/ubuntu/.venvburrito/lib/python2.7/site-packages/pip-8.1.2-py2.7.egg, outside environment /home/ubuntu/.virtualenvs/virtual_env
Successfully installed pip-8.1.2
You are using pip version 8.1.2, however version 9.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
If I try it with sudo, inside the virtual environment, I get the following error:
(virtual_env) ubuntu#ip-xxxxxxx:~$ sudo pip install --upgrade pip
The directory '/home/ubuntu/.cache/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
The directory '/home/ubuntu/.cache/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
/home/ubuntu/.local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:318: SNIMissingWarning: An HTTPS request has been made, but the SNI (Subject Name Indication) extension to TLS is not available on this platform. This may cause the server to present an incorrect TLS certificate, which can cause validation failures. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#snimissingwarning.
SNIMissingWarning
/home/ubuntu/.local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
Requirement already up-to-date: pip in ./.local/lib/python2.7/site-packages
/home/ubuntu/.local/lib/python2.7/site-packages/pip/_vendor/requests/packages/urllib3/util/ssl_.py:122: InsecurePlatformWarning: A true SSLContext object is not available. This prevents urllib3 from configuring SSL appropriately and may cause certain SSL connections to fail. You can upgrade to a newer version of Python to solve this. For more information, see https://urllib3.readthedocs.io/en/latest/security.html#insecureplatformwarning.
InsecurePlatformWarning
When I do it outside the virtual environment, it installs correctly.
Any help will be much appreciated.
Thanks
Try this one, it worked for me.
(inside virtualenv):easy_install -U pip
or
(inside virtualenv):easy_install pip
sometimes this helps(I had similar issue pip not upgrading and 1st command worked for me):
python -m ensurepip
or
python -m ensurepip --upgrade
Try installing it as follows, within your virtualenv:
curl https://bootstrap.pypa.io/get-pip.py | python
Seen a lot of problems with pip that all seem to be fixed by running it as a python module instead of directly:
python -m pip install --upgrade pip

Categories