python-in-edu
python-in-edu copied to clipboard
Improve installation instructions - fix errors
When attempting to clone and install the project as instructed in the README, on a MacOS system, I first ran into an error related to installing psycopg2
:
Collecting psycopg2==2.8.6 (from -r requirements.txt (line 16))
Using cached https://files.pythonhosted.org/packages/fd/ae/98cb7a0cbb1d748ee547b058b14604bd0e9bf285a8e0cc5d148f8a8a952e/psycopg2-2.8.6.tar.gz
ERROR: Command errored out with exit status 1:
command: /Users/martin/Documents/projects/python-in-edu/.venv/bin/python -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-inoib_0k/psycopg2/setup.py'"'"'; __file__='"'"'/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-inoib_0k/psycopg2/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base pip-egg-info
cwd: /private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-inoib_0k/psycopg2/
Complete output (23 lines):
running egg_info
creating pip-egg-info/psycopg2.egg-info
writing pip-egg-info/psycopg2.egg-info/PKG-INFO
writing dependency_links to pip-egg-info/psycopg2.egg-info/dependency_links.txt
writing top-level names to pip-egg-info/psycopg2.egg-info/top_level.txt
writing manifest file 'pip-egg-info/psycopg2.egg-info/SOURCES.txt'
Error: pg_config executable not found.
pg_config is required to build psycopg2 from source. Please add the directory
containing pg_config to the $PATH or specify the full executable path with the
option:
python setup.py build_ext --pg-config /path/to/pg_config build ...
or with the pg_config option in 'setup.cfg'.
If you prefer to avoid building psycopg2 from source, please install the PyPI
'psycopg2-binary' package instead.
For further information please check the 'doc/src/install.rst' file (also at
<https://www.psycopg.org/docs/install.html>).
----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
This is fixed by installing Postgres.
I suggest to add a note to the README that contributors need to have Postgres installed to be able to run the project locally.
Further, after successfully installing Postgres and adding it to my PATH, I ran into another error related to a missing installation of libjpeg
:
Installing collected packages: Pillow, olefile, django-spirit, gunicorn, python-dotenv
Running setup.py install for Pillow ... error
ERROR: Command errored out with exit status 1:
command: /Users/martin/Documents/projects/python-in-edu/.venv/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py'"'"'; __file__='"'"'/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-record-1rw02kjt/install-record.txt --single-version-externally-managed --compile --install-headers /Users/martin/Documents/projects/python-in-edu/.venv/include/site/python3.8/Pillow
cwd: /private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/
Complete output (174 lines):
running install
running build
running build_py
creating build
creating build/lib.macosx-10.14.6-arm64-3.8
creating build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/MpoImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageMode.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PngImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/XbmImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PcxImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/SunImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/SpiderImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/TarIO.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/FitsStubImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/MpegImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/BdfFontFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/GribStubImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageStat.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PixarImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/GimpPaletteFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageColor.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ContainerIO.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/MspImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/MicImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/_version.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImtImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/GifImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PalmImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageQt.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageMath.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PaletteFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/FontFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PdfParser.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ExifTags.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageCms.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/FpxImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageChops.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/BufrStubImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PSDraw.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PcdImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageFilter.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageDraw2.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImagePath.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/DcxImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/__init__.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/JpegPresets.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/Hdf5StubImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/features.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageDraw.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/GimpGradientFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageWin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/IcoImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/_tkinter_finder.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/EpsImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/TgaImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageMorph.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/Jpeg2KImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/WalImageFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PcfFontFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/BlpImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageTk.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/GbrImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageOps.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PdfImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageShow.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageEnhance.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/WmfImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageGrab.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/WebPImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/FliImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/TiffTags.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/CurImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/_util.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/GdImageFile.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/TiffImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/IptcImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImagePalette.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/BmpImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageTransform.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/IcnsImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/McIdasImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/XpmImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/DdsImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageSequence.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PyAccess.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/_binary.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/Image.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/__main__.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/XVThumbImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/SgiImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PsdImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/JpegImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/ImageFont.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/PpmImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
copying src/PIL/FtexImagePlugin.py -> build/lib.macosx-10.14.6-arm64-3.8/PIL
running egg_info
writing src/Pillow.egg-info/PKG-INFO
writing dependency_links to src/Pillow.egg-info/dependency_links.txt
writing top-level names to src/Pillow.egg-info/top_level.txt
reading manifest file 'src/Pillow.egg-info/SOURCES.txt'
reading manifest template 'MANIFEST.in'
warning: no files found matching '*.c'
warning: no files found matching '*.h'
warning: no files found matching '*.sh'
warning: no previously-included files found matching '.appveyor.yml'
warning: no previously-included files found matching '.coveragerc'
warning: no previously-included files found matching '.editorconfig'
warning: no previously-included files found matching '.readthedocs.yml'
warning: no previously-included files found matching 'codecov.yml'
warning: no previously-included files matching '.git*' found anywhere in distribution
warning: no previously-included files matching '*.pyc' found anywhere in distribution
warning: no previously-included files matching '*.so' found anywhere in distribution
no previously-included directories found matching '.ci'
writing manifest file 'src/Pillow.egg-info/SOURCES.txt'
running build_ext
The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
Traceback (most recent call last):
File "/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py", line 861, in <module>
setup(
File "/Users/martin/Documents/projects/python-in-edu/.venv/lib/python3.8/site-packages/setuptools/__init__.py", line 145, in setup
return distutils.core.setup(**attrs)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/core.py", line 148, in setup
dist.run_commands()
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 966, in run_commands
self.run_command(cmd)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/Users/martin/Documents/projects/python-in-edu/.venv/lib/python3.8/site-packages/setuptools/command/install.py", line 61, in run
return orig.install.run(self)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/command/install.py", line 561, in run
self.run_command('build')
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/command/build.py", line 135, in run
self.run_command(cmd_name)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/cmd.py", line 313, in run_command
self.distribution.run_command(command)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/dist.py", line 985, in run_command
cmd_obj.run()
File "/Users/martin/Documents/projects/python-in-edu/.venv/lib/python3.8/site-packages/setuptools/command/build_ext.py", line 84, in run
_build_ext.run(self)
File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.8/lib/python3.8/distutils/command/build_ext.py", line 340, in run
self.build_extensions()
File "/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py", line 698, in build_extensions
raise RequiredDependencyException(f)
__main__.RequiredDependencyException: jpeg
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py", line 914, in <module>
raise RequiredDependencyException(msg)
__main__.RequiredDependencyException:
The headers or library files could not be found for jpeg,
a required dependency when compiling Pillow from source.
Please see the install instructions at:
https://pillow.readthedocs.io/en/latest/installation.html
----------------------------------------
ERROR: Command errored out with exit status 1: /Users/martin/Documents/projects/python-in-edu/.venv/bin/python3 -u -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py'"'"'; __file__='"'"'/private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-install-6bqer60n/Pillow/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' install --record /private/var/folders/52/0zsd69115l57tf4st_1fw69w0000gn/T/pip-record-1rw02kjt/install-record.txt --single-version-externally-managed --compile --install-headers /Users/martin/Documents/projects/python-in-edu/.venv/include/site/python3.8/Pillow Check the logs for full command output.
I needed to install homebrew in order to install jpeg
to finally get to a point where python -m pip install -r requirements.txt
succeeded without an error.
tl;dr: On a new MacOS machine, there's quite some additional setup necessary just to get the project to run. I'm not exactly sure why (I've worked on Django projects on this computer before), but it would be helpful to add some pointers to the README file to make it more accessible for newcomers.
Thanks for catching this!
I think these are requirements related to the Spirit forums, which requires postgres and pillow. (This site should use postgres on Heroku and sqlite3 locally.) We should link to their setup instructions regardless so people don't get confused about why the forum's not working if they don't follow the extra steps, but maybe doing the Spirit setup process will avoid some of the trouble you ran into? Or maybe not - I developed on Ubuntu and it may be that the process is just harder on Mac.
I see that @aeltanawy already has a PR up to fix this. Up to you all if/how you want to incorporate this info.
I had a similar issue with pip installing psycopg2
on my Mac as well (macOS Mojave 10.14.6).
The error ends with:
ld: library not found for -lssl
clang: error: linker command failed with exit code 1 (use -v to see invocation)
error: command '/usr/bin/gcc' failed with exit code 1
----------------------------------------
ERROR: Command errored out with exit status 1:
Full error text: https://gist.github.com/Ben-Hampson/70371c7390e67c6484b91a90778fb266
In previous Django projects to get around this I've pip installed pyscopg2-binary
instead and that's worked fine. However that didn't work here. Installing Postgres locally, from postgress.app or homebrew, didn't work either. This command worked for me instead. I'm not sure what it's really about but I wanted to put it here in case it helps others.
env LDFLAGS="-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib" pip install psycopg2
I found this solution at https://stackoverflow.com/questions/26288042/error-installing-psycopg2-library-not-found-for-lssl
@shaunagm, for some reason I didn't run into this issue on my Mac however I have developed with postgres before so my computer should have the required setup to run this app locally. The only thing I needed to do though is to build the database with python manage.py migrate
so @martin-martin and I thought it would be a good addition to the ReadMe file.
Thank you, this is super helpful. I'm updating the issue to specify instructions for multiple platforms. @aeltanawy and @Ben-Hampson