AttributeError: 'NoneType' object has no attribute 'loader'
Solution 1:
Delete /home/cjones/.local/lib/python3.6/site-packages/googleapis_common_protos-1.5.8-py3.6-nspkg.pth
and retry.
Solution 2:
I had the similar problem, but the error message referenced a different .pth file. The error message I received was:
Error processing line 1 of /Users/jt/anaconda3/lib/python3.7/site-packages/sphinxcontrib.datatemplates-nspkg.pth:
Traceback (most recent call last):
File "/Users/jt/anaconda3/lib/python3.7/site.py", line 168, in addpackage
exec(line)
File "<string>", line 1, in <module>
File "<frozen importlib._bootstrap>", line 580, in module_from_spec
AttributeError: 'NoneType' object has no attribute 'loader'
Remainder of file ignored
Following the solution described here:
https://github.com/Pyomo/pyomo/issues/95
I edited the .pth file (the file at the start of the error message, immediately after the text Error processing line 1 of
) and added a newline character after the first semicolon. That is, I changed:
import sys, types, os;has_mfs = sys.version_info > (3, 5);p ...<rest of file>
To:
import sys, types, os;
has_mfs = sys.version_info > (3, 5);p ...<rest of file>
I don't know why this worked, but it did.
Solution 3:
I had a similar error with my virtual environments on a mac, but referring to matplotlib:
Error processing line 1 of //anaconda3/lib/python3.7/site-packages/matplotlib-3.1.3-py3.7-nspkg.pth:
As in the previous answer, it was solved by changing the file mentioned:
import sys, types, os;has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).$
to this, via a linebreak:
import sys, types, os;
has_mfs = sys.version_info > (3, 5);p = os.path.join(sys._getframe(1).$
Solution 4:
I had to do :0,$s/;/;\r/g in vi.
it looks like a line is too long for pip3 to process. Basically, some packages put all commands on one line and that overflows a buffer somewhere.
This vi command puts a carriage return after every semicolon. (It is possible a newline (\n) would work instead of a carriage return.)
Breakdown of the command:
: - use ED line editor command
0,$ - run on all lines
s - regular expression substitution
/ - delimiter start search
; - replace semicolon with
/ - delimiter end search start replace
;\r - replace with semicolon followed by carriage return
/ - delimiter end replace
g - global - do more than once per line.
This is a very common vi command. If you need to replace a "/", you can use another character as the delimiter - the first character after "s" is the delimiter