native FAF on ubuntu (QtWebKit on ubuntu 17.04+)
Solution 1
Note: the steps for Python 3 with PyQt5 are proven to work while the steps for Python 2 with PyQt4 and PySide are still experimental.
Python 3 with PyQt5 (proven to work)
It appears that the 474-feature-py3
branch of the FAForever/client GitHub repository uses Python 3 with PyQt5, which contains QtWebKit. Therefore, using this branch is the most straightforward solution. Note that PyQt5 (but not PyQt4) can in fact be installed with pip
, so that makes things way more convenient.
Steps for Python 3 with PyQt5:
-
cd
into a directory of your choice, which will be~/Desktop/temp
for the purpose of writing this answer,git clone
the FAForever/client GitHub repository andgit checkout
the474-feature-py3
branch:mkdir ~/Desktop/temp cd ~/Desktop/temp git clone https://github.com/FAForever/client.git faf-client cd faf-client git checkout 474-feature-py3
-
Create and activate a virtualenv for Python 3 (the default is Python 3.5 for Ubuntu 17.04) and force-upgrade
pip
just to make sure it is up-to-date:virtualenv venv -p python3 # replace python3 with python3.6 if you want to use Python 3.6 instead source venv/bin/activate pip install -U --force-reinstall pip
-
Use
pip
to installPyQt5
and fromrequirements.txt
:pip install PyQt5 pip install -r requirements.txt
-
Download the
faf-uid
binary intofaf-client/lib
and make it executable:wget https://github.com/FAForever/uid/releases/download/v4.0.4/faf-uid -O lib/faf-uid chmod +x lib/faf-uid
-
Run
python
onsrc/__main__.py
:python src/__main__.py
Python 2 with PyQt4 and PySide (experimental)
It looks like I may have figured out how to import the QtWebKit
module, but I don't have the FAF game installed, so I cannot fully verify that this works and therefore this answer is a work in progress.
In a nutshell, I used apt
to install python-qt4
, which does not have the QtWebKit
module. I created and activated a virtualenv without using the --system-site-packages
option and used pip
to install PySide
, which does have the QtWebKit
module. I then symlinked the appropriate system libraries and files for PyQt4 into the virtualenv. Then I made a couple of changes to faf-client/src
to import the QtWebKit
module from PySide
. This solution is inspired by https://stackoverflow.com/a/28850104/486919, https://stackoverflow.com/a/36887302/486919 and https://stackoverflow.com/a/37616466/486919.
Steps:
-
Install
python-qt4
:sudo apt update sudo apt install python-qt4
-
cd
into a directory of your choice, which will be~/Desktop/temp
for the purpose of writing this answer,git clone
my version of the repository andgit checkout
thepatch
branch:mkdir ~/Desktop/temp cd ~/Desktop/temp git clone https://github.com/edwinksl/client.git faf-client cd faf-client git checkout patch
This
patch
branch has several additional commits compared to the defaultdevelop
branch: 1) it gets rid of the version specification forcx_Freeze
, which was giving me installation problems if I used the4.3.4
version previously specified, and 2) it importsQtWebKit
fromPySide
instead ofPyQt4
. -
Create and activate a virtualenv for Python 2 and force-upgrade
pip
just to make sure it is up-to-date:virtualenv venv source venv/bin/activate pip install -U --force-reinstall pip
-
Use
pip
to installPySide
and fromrequirements.txt
:pip install PySide pip install -r requirements.txt
-
Download the
faf-uid
binary intofaf-client/lib
and make it executable:wget https://github.com/FAForever/uid/releases/download/v4.0.4/faf-uid -O lib/faf-uid chmod +x lib/faf-uid
-
cd
to thesite-packages
directory inside the virtualenv and make appropriate symlinks:cd venv/lib/python2.7/site-packages ln -s /usr/lib/python2.7/dist-packages/PyQt4/ . ln -s /usr/lib/python2.7/dist-packages/sip.x86_64-linux-gnu.so .
Note the
.
at the end of each symlink. -
cd
back tofaf-client
and runpython
onsrc/__main__.py
:cd - # this goes back to previous directory, which should be ~/Desktop/temp/faf-client python src/__main__.py
Solution 2
Check ~/.bashrc
for Python version override
The package you are wanting to compile requires Python version 2.7.x. Confirm that with these commands:
$ python
Python 2.7.12 (default, Nov 19 2016, 06:48:10)
[GCC 5.4.0 20160609] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import PyQt4
>>> print PyQt4.__path__
['/usr/lib/python2.7/dist-packages/PyQt4']
>>>
That was the problem in this Q&A.
You are not alone with linux error PyQt4 import QtWebKit
google search:
- ImportError: No module named 'PyQt4.QtWebKit'
- cannot run spyder / ImportError: No module named QtWebKit #3200
- ImportError: No module named 'PyQt4.QtWebKit' #1683
- Some PyQt4 applications fail to start in Yakkety due to missing PyQt4-WebKit
- Python cannot import specific PyQt4 QtWebKit modules
- Python 2.7.11 - ImportError: cannot import name QtWebKit - Kali Linux / Debian 8
- PyQt4: Why I get “ImportError: No module named QtWebkit”?
Unfortunately there are alot more google results but these I believe are the most pertinent for you to read if the first recommendation doesn't pan out.
Related videos on Youtube
tatsu
Updated on September 18, 2022Comments
-
tatsu over 1 year
I'm trying to run FAF (natively) in conjunction with FA (through wine)
(due to the views this post receives and to how much the methods have updated I've decided to update this question for it to answer as well as ask. check revision history of this post for the process to finding the old method to run the python client and the old guides)
Beta-state Java Client :
use this script : (updated 3/12/2019)
https://github.com/tatsujb/installFAFscript
https://www.youtube.com/watch?v=BEWUEoQ8Q4k
Python client : (NOW OBSOLETE)
How to: compile this python app (FAF) from source :
up and running thanks to @edwinksl 's "Python 3 with PyQt5" guide. marked him as solution. good job!
Update (31/1/2018)
Sorry I took so long to update this post. it's gotten 7000 views! it really deserves up-to-date info.
Since I asked a lot has happened. FAF now has more or less linux support. they even have a wiki to installing it (and per distro!) :
https://wiki.faforever.com/index.php?title=Setting_Up_FAF_Linux#Debian.2FUbuntu
it's not guaranteed to fit your needs, more can be found by digging in : http://forums.faforever.com/viewtopic.php?f=2&t=4507
right now the wiki isn't all that up to date.
for awhile I could get faf to run with native python, no virtualenv needed but QT's aver changing dependencies and package composition as well as the FAF usage of them has broken that again ... temporarily I hope !
rest assured I've got it running personally and I'm here to offer solace (try skipping steps 6 & 7 first they may be unneeded ):
- Install some prerequisites :
sudo apt update && sudo apt install wget PyQt5.QtMultimedia python3-idna python3-semantic-version python3-pyqt5 python3-pyqt5.qtwebengine
-
cd Downloads && wget https://github.com/FAForever/client/archive/0.16.1.tar.gz
(or whichever release is latest at https://github.com/FAForever/client/releases/ ) - extract (for this example I'll extract to home) (
cd Downloads/ && mv client-0.16.1.tar.gz ~/ && cd && tar -zxf client-0.16.1.tar.gz && mv client-0.16.1 faf-client && rm client-0.16.1.tar.gz
) -
cd fafclient/
: move to the working dirrectory -
sed -i 1,1d requirements.txt
: removes cxFreeze from the requirements (it's not required and it will kill compile) virtualenv -p python3 faf
pip install -r requirements.txt
-
sudo wget https://github.com/FAForever/uid/releases/download/v4.0.5/faf-uid -O /usr/bin/faf-uid
: downloads login binary and :sudo chmod +x /usr/bin/faf-uid
allows it to be executed by faf. -
touch res/RELEASE-VERSION && echo "0.16.1" >> res/RELEASE-VERSION
: fulfills faf's final requirement : a release version file.
now it should run but for the heck of it let's make a runner :
touch FAF.sh echo "#! /bin/bash" >> FAF.sh echo "cd /home/t/faf-client" >> FAF.sh echo "python3 src/__main__.py" >> FAF.sh chmod +x FAF.sh
then
./FAF.sh
to run FAF.Cheers!
-
Admin almost 7 yearsSee wiki.qt.io/Building_Qt_5_from_Git . If you still have a problem, contact the qtwebkit maintainers directly.
-
Admin almost 7 years
t@tsu:~$ sudo apt-get build-dep qt5-default Reading package lists... Done E: You must put some 'source' URIs in your sources.list
-
Admin almost 7 yearsSo put source uri in - askubuntu.com/questions/496549/…
-
Admin almost 7 yearsi ran evey command on that page except for the "Convenience packages (Ubuntu 11.10 -- 12.10 only)" and yet the FAF crash issue persists. and also
t@tsu:~$ whereis qtwebkit qtwebkit:
-
Admin almost 7 yearsIt is unfortuinate, but I have found the qt apps are difficult / frustrating to compile when I have had to do so in the past. File a bug report upstream.
-
Admin almost 7 yearsok. is the fact that after adding the sources and updating. when I do :
sudo apt-get build-dep qt5-default
I get the message ending withE: Unable to correct problems, you have held broken packages.
caused by me having all these random compiles qt and whatnot or is it something else? packages aren't really broken since upgrade and install still work -
Admin almost 7 years"It depends" building qt has been a pain as it is in rapid development and the dependencies are not always available in any specific version of Ubuntu. You will need to debug that warning though.
-
Admin almost 7 yearsalso since I'm new to this I don't know where that bug reporting would be. may I have a link please?
-
Admin almost 7 years
-
Admin almost 7 yearsis it a QT Web BRowser bug or a QT bug I'm going with QT
-
Admin almost 7 yearsThere are both python (python2) and python3 versions. Are you installing the correct one. Ubuntu is in the process of converting from python2 to python3, so depending on version of Ubuntu you may have one or the other or both. But can install either from all versions of Ubuntu. And then which python is program based on?
-
Admin almost 7 yearsthis program is definitely python2 ... as per why i have to use virtualenv. It's suicide to compile python2 on ubuntu 11+ as far as i know.
-
Admin almost 7 years@oldfred hey i've updated the OP could you tell me what you think of this new approach. it was suggested to me by the people of QT bug report but I can't get it to work either.
-
Admin almost 7 yearsI have never compiled anything. But I think I am using this and have it installed using synaptic from Ubuntu repository. python3-pyqt5.qtwebkit
-
Admin almost 7 years@oldfred in my OP i said i did this. this did not yeild results. perhaps it means qtwebkit needs to be available virtualenv side?
-
Admin almost 7 yearsNever used virtualenv, so do not know.
-
Admin almost 7 years@tatsu I think I managed to get QtWebKit working but I don't have the FAF game, so I can't fully verify this works. Let me try to get a chatroom set up so we can discuss.
-
Admin almost 7 years@tatsu Meanwhile I wrote an answer. Give it a try and see if it helps.
-
Admin almost 7 years@tatsu Your latest error log shows that
_clientwindow.py
is trying to importQtWebKit
fromPyQt4
, which is the cause of the problem. Try importingQtWebKit
fromPySide
instead. -
Admin almost 7 years@edwinksl I'm completely noob on this matter. how do I accomplish that x) ?
- Install some prerequisites :
-
tatsu almost 7 yearsfirst off thank you! and sorry I missed the queue. I was hospitalized. I'm stuck at :
Resolving deltas: 100% (8873/8873), done. t@tsu:~/Desktop/temp$ git checkout patch fatal: Not a git repository (or any of the parent directories): .git t@tsu:~/Desktop/temp$ git init Initialized empty Git repository in /home/t/Desktop/temp/.git/ t@tsu:~/Desktop/temp$ git checkout patch error: pathspec 'patch' did not match any file(s) known to git.
-
edwinksl almost 7 years@tatsu My bad. You need to
cd
into thefaf-client
directory first, then dogit checkout patch
. -
tatsu almost 7 years@edwinskl yup!! and cd back up once that is done!
-
tatsu almost 7 years@edwinskl right after
pip install -r faf-client/requirements.txt
I addedwget https://github.com/FAForever/uid/releases/download/v4.0.4/faf-uid -O ./faf-client/lib/faf-uid
andchmod +x ./faf-client/lib/faf-uid
then didcd ./faf-client && ../venv/bin/python src/__main__.py
as per the original tutorial forum post I built my script with : forums.faforever.com/… FAF runs bbut still with an error log. -
edwinksl almost 7 years@tatsu Feel free to suggest edits! After all you have the game installed while I don't...
-
tatsu almost 7 years@edwinski I think I'm close now. perhaps the pointers aren't working since I don't have a clear package setup I'm uninstalling all previous installs. removing any libqt4 or libqt5 package seems impossible due to them being required over the whole system. can I rule them out as not interfering?
-
edwinksl almost 7 yearsAs long as you are creating your virtualenv without using the
--system-site-packages
flag, then your global installs for qt4 and qt5 should not affect the virtualenv. -
tatsu almost 7 yearsthank but I'm not sure if it's me who's not understanding or what but I'm using virtualenv which (I believe) is helping me not have to install python2 locally. given that i shouldn't have to worry about python3 meddling with anything. correct me if I completely missed the mark here
-
edwinksl almost 7 yearsLet us continue this discussion in chat.
-
tatsu almost 7 yearsfor python3 :
(venv) t@tsu:~/faf/faf-client$ python src/__main__.py Traceback (most recent call last): File "src/__main__.py", line 52, in <module> import util File "/home/t/faf/faf-client/src/util/__init__.py", line 12, in <module> from semantic_version import Version ImportError: No module named 'semantic_version'
-
edwinksl almost 7 years@tatsu
semantic_version
is clearly inrequirements.txt
, so this error is very unexpected. Make sure you followed every step correctly. -
tatsu almost 7 yearsyup! that's it!