Я пытался написать крошечную программу, чтобы попрактиковаться в смешивании c ++ с python, но в самом начале не получилось. Py_Initialize
не удалось. В сообщении об ошибке сказано, что:
Could not find platform independent libraries <prefix>
Could not find platform dependent libraries <exec_prefix>
Consider setting $PYTHONHOME to <prefix>[:<exec_prefix>]
Fatal Python error: Py_Initialize: Unable to get the locale encoding
ImportError: No module named 'encodings'
Current thread 0x00007f5bdd5b6780 (most recent call first):
И код:
#include"Python.h"#include<iostream>
using namespace std;
int main()
{
Py_Initialize();
Py_Finalize();
return 1;
}
Заметка что я поставил PYTHONHOME быть:
/home/ddyang/anaconda3/
Так как я использую питона в анаконде.
Результат echo $PYTHONHOME
это хорошо. И когда я набираю python в терминале, он также говорит, что я использую Python от Anaconda. И другие программы, которые я использую с помощью python в anaconda, также работают нормально.
Так что я действительно запутался.
Я написал код в Eclipse и успешно скомпилировал его. Не было ошибок во время компиляции. Однако перед проблемой, упомянутой выше, существовала еще одна ошибка. Он сказал, что:
home/ddyang/ec-workspace/test-main/Debug/test-main: error while loading shared libraries: libpython3.5m.so.1.0: cannot open shared object file: No such file or directory
Затем я установил символическую ссылку и решил эту проблему, но я не знал, как это на самом деле работает:
sudo ln -s /home/ddyang/anaconda3/lib/libpython3.5m.so.1.0 /usr/lib/libpython3.5m.so.1.0
Я предполагаю, что, возможно, я действительно не решил первую проблему, которая привела к текущей.
Переменная окружения, которую я установил в .Bashrc является:
export PATH="$PATH:/home/ddyang/anaconda3/bin"export PATH="$PATH:/usr/local/cuda/bin"alias python='/home/ddyang/anaconda3/bin/python'
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-7.5/lib64
export PYTHONHOME="/home/ddyang/anaconda3/"
—-Обновить—-
Затем я добавил PYTHONHOME а также PYTHONPATH в etc/environment
, проблема выше исчезла, однако появилась другая проблема:
Failed to import the site module
Traceback (most recent call last):
File "/home/ddyang/anaconda3/lib/python3.5/site.py", line 72, in <module>
import os
File "/home/ddyang/anaconda3/lib/python3.5/os.py", line 666, in <module>
from _collections_abc import MutableMapping
File "/home/ddyang/anaconda3/lib/python3.5/_collections_abc.py", line 56
async def _coro(): pass
^
SyntaxError: invalid syntax
Я считаю, что эта проблема заключается в ситуации, когда я я использую неправильную версию Python, не тот, что в anaconda3 (python3.5). Тем не менее, когда я в терминале, я печатаю python --version
он говорит, что я использую Python 3.5 в Anaconda.
Следующий код может поддержать мою догадку.
ddyang@dd-pc:/usr/local/bin$ ls
charm cmake cpack ctest uncrustify
ddyang@dd-pc:/usr/local/bin$ python charm
File "/home/ddyang/anaconda3/lib/python3.5/site.py", line 176
file=sys.stderr)
^
SyntaxError: invalid syntax
ddyang@dd-pc:/usr/local/bin$ /home/ddyang/anaconda3/bin/python charm
ddyang@dd-pc:/usr/local/bin$ /usr/bin/python3.4 charm
Failed to import the site module
Traceback (most recent call last):
File "/home/ddyang/anaconda3/lib/python3.5/site.py", line 72, in <module>
import os
File "/home/ddyang/anaconda3/lib/python3.5/os.py", line 666, in <module>
from _collections_abc import MutableMapping
File "/home/ddyang/anaconda3/lib/python3.5/_collections_abc.py", line 56
async def _coro(): pass
^
SyntaxError: invalid syntax
ddyang@dd-pc:/usr/local/bin$ /usr/bin/python2.7 charm
File "/home/ddyang/anaconda3/lib/python3.5/site.py", line 176
file=sys.stderr)
^
SyntaxError: invalid syntax
И python3.4 является системным питоном по умолчанию. Кажется, когда я имею в виду это.
Задача ещё не решена.
Других решений пока нет …