2013-11-25 1 views
3

Как получить python python?Python - как получить импорт pjsua? не дает никакого модуля с именем pjsua

$ wget http://www.pjsip.org/release/2.1/pjproject-2.1.tar.bz2 
$ tar xvfj pjproject-2.1.tar.bz2 
$ cd pjproject-2.1.0 
$ ./configure 
$ make dep && make 
$ make install 
$ ldconfig 
$ ldconfig -p | grep pj 


$ cd ./pjsip-apps/src/python 
$ python setup.py install 
running install 
running build 
running build_py 
running build_ext 
building '_pjsua' extension 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DPJ_AUTOCONF=1 -I-DPJ_IS_BIG_ENDIAN=0 -I-DPJ_IS_LITTLE_ENDIAN=1 -I/home/sun/Downloads/pjproject-2.1.0/pjlib/include -I/home/sun/Downloads/pjproject-2.1.0/pjlib-util/include -I/home/sun/Downloads/pjproject-2.1.0/pjnath/include -I/home/sun/Downloads/pjproject-2.1.0/pjmedia/include -I/home/sun/Downloads/pjproject-2.1.0/pjsip/include -I/usr/include/python2.7 -c _pjsua.c -o build/temp.linux-x86_64-2.7/_pjsua.o 
_pjsua.c: In function ‘py_pjsua_enum_transports’: 
_pjsua.c:1201:17: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] 
_pjsua.c: In function ‘py_pjsua_conf_get_port_info’: 
_pjsua.c:2337:9: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] 
_pjsua.c: In function ‘py_pjsua_get_snd_dev’: 
_pjsua.c:2713:9: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] 
_pjsua.c: In function ‘py_pjsua_call_make_call’: 
_pjsua.c:3139:7: warning: passing argument 3 of ‘pjsua_call_make_call’ makes pointer from integer without a cast [enabled by default] 
In file included from _pjsua.h:27:0, 
       from _pjsua.c:20: 
/home/sun/Downloads/pjproject-2.1.0/pjsip/include/pjsua-lib/pjsua.h:4234:22: note: expected ‘const struct pjsua_call_setting *’ but argument is of type ‘unsigned int’ 
gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro build/temp.linux-x86_64-2.7/_pjsua.o -L/home/sun/Downloads/pjproject-2.1.0/pjlib/lib -L/home/sun/Downloads/pjproject-2.1.0/pjlib-util/lib -L/home/sun/Downloads/pjproject-2.1.0/pjnath/lib -L/home/sun/Downloads/pjproject-2.1.0/pjmedia/lib -L/home/sun/Downloads/pjproject-2.1.0/pjsip/lib -L/home/sun/Downloads/pjproject-2.1.0/third_party/lib -lpjsua-x86_64-unknown-linux-gnu -lpjsip-ua-x86_64-unknown-linux-gnu -lpjsip-simple-x86_64-unknown-linux-gnu -lpjsip-x86_64-unknown-linux-gnu -lpjmedia-codec-x86_64-unknown-linux-gnu -lpjmedia-videodev-x86_64-unknown-linux-gnu -lpjmedia-x86_64-unknown-linux-gnu -lpjmedia-audiodev-x86_64-unknown-linux-gnu -lpjnath-x86_64-unknown-linux-gnu -lpjlib-util-x86_64-unknown-linux-gnu -lresample-x86_64-unknown-linux-gnu -lmilenage-x86_64-unknown-linux-gnu -lsrtp-x86_64-unknown-linux-gnu -lgsmcodec-x86_64-unknown-linux-gnu -lspeex-x86_64-unknown-linux-gnu -lilbccodec-x86_64-unknown-linux-gnu -lg7221codec-x86_64-unknown-linux-gnu -lportaudio-x86_64-unknown-linux-gnu -lpj-x86_64-unknown-linux-gnu -lm -lnsl -lrt -lpthread -lcrypto -lssl -o build/lib.linux-x86_64-2.7/_pjsua.so 
/usr/bin/ld: /home/sun/Downloads/pjproject-2.1.0/pjsip/lib/libpjsua-x86_64-unknown-linux-gnu.a(pjsua_acc.o): relocation R_X86_64_32S against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC 
/home/sun/Downloads/pjproject-2.1.0/pjsip/lib/libpjsua-x86_64-unknown-linux-gnu.a: could not read symbols: Bad value 
collect2: error: ld returned 1 exit status 
error: command 'gcc' failed with exit status 1 


$ python 
Python 2.7.3 (default, Apr 10 2013, 05:13:16) 
[GCC 4.7.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> import pjsua 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named pjsua 

EDIT:

p2p | registration | call

$ python sip_hello.py sip:localhost:5080 
18:22:21.607 os_core_unix.c !pjlib 2.1 for POSIX initialized 
18:22:21.608 sip_endpoint.c .Creating endpoint instance... 
18:22:21.608   pjlib .select() I/O Queue created (0x131b9f0) 
18:22:21.608 sip_endpoint.c .Module "mod-msg-print" registered 
18:22:21.608 sip_transport. .Transport manager created. 
18:22:21.608 pjsua_core.c .PJSUA state changed: NULL --> CREATED 
18:22:21.622 pjsua_core.c .pjsua version 2.1 for Linux-3.5.0.17/x86_64/glibc-2.15 initialized 
18:22:21.625 pjsua_aud.c ..Error retrieving default audio device parameters: Unable to find default audio device (PJMEDIA_EAUD_NODEFDEV) [status=420006] 
Exception: Object: {Account <sip:192.168.1.15:57717>}, operation=make_call(), error=Unable to find default audio device (PJMEDIA_EAUD_NODEFDEV) 
+0

необходимо Побольше описание, а не просто дамп ошибки. Однако кажется, что ваша сборка не удалась, почему «pjsua» недоступен? Кроме того, проверьте пути, чтобы убедиться, что в конечном итоге скомпилированные модули могут быть найдены. – icedwater

+0

Является ли это ошибкой для модуля python? Потому что он никогда не работал с Ubuntu 11, 12, 13 вообще. Также есть старые версии, все из которых дают ту же ошибку. – YumYumYum

+1

Я так думаю, я никогда не использовал этот модуль. Я просто указываю, что сброс неудачной сборки на самом деле не является достаточной информацией для решения проблемы, если только она не является подлинно просто потому, что здание терпит неудачу. Я думаю, вы могли бы посмотреть на эту строку: '/ usr/bin/ld: /home/sun/Downloads/pjproject-2.1.0/pjsip/lib/libpjsua-x86_64-unknown-linux-gnu.a(pjsua_acc.o) : перемещение R_X86_64_32S против '.rodata.str1.1' не может использоваться при создании общего объекта; перекомпилировать с -fPIC'? – icedwater

ответ

8

setup.py пытается создать общую библиотеку build/lib.linux-x86_64-2.7/_pjsua.so путем динамического связывания библиотек pjsip, но, тем не обеспечивает global offsets table(GOT) (проверьте ссылку, чтобы понять, почему это необходимо).

Проблема заключается в том, что ./configure не обеспечивает -fPIC вариант GCC, я хотел бы предложить создавая configure-linux сценарий, как:

#!/bin/sh 
# 
export CFLAGS="$CFLAGS -fPIC" 

./configure 
+1

+1 - отлично работает. альтернативные ускорители, например: '$ export CFLAGS =" $ CFLAGS -fPIC "&&./configure' – YumYumYum

+1

@YumYumYum Да, но я предложил создать собственный скрипт, чтобы вы могли настроить свой проект по своему усмотрению (например, я отключил видео и установил некоторые специальные ссылки) – jcm

+0

http://paste.ubuntu.com/6508845/ - это мой журнал настроек, после настройки, сборки, когда я его использую, есть ошибка в обнаружении звуковой карты ALSA, многие говорят, что у вас есть libasound2- dev, который я также сделал, но все же ALSA не обнаруживается. Есть ли что-нибудь еще, о чем вы можете знать? – YumYumYum

5

Хорошо, я не могу найти хороший гид онлайн для этого, и совет @ JCM в помог мне, поэтому я решил, что просто опубликую это здесь.

У меня была аналогичная проблема с OP. Во время моей сборки я получил бы ошибку:

/usr/bin/ld: /opt/pjproject-2.2.1/pjsip/lib/libpjsua-x86_64-unknown-linux-gnu.a(pjsua_acc.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC 
/opt/pjproject-2.2.1/pjsip/lib/libpjsua-x86_64-unknown-linux-gnu.a: could not read symbols: Bad value 

Просто добавив флаг, не исправит его.

Я не знаю, сколько это не важно, но это то, что сработало для меня. Обратите внимание, что вам нужно удалить папку и начать с нуля. Это возможно «сделать чистый» работает, но удаление и повторное здание было самым легким для меня:

sudo apt-get install build-essential python-dev 
sudo rm -fr pjproject-2.2.1 
tar -xf pjproject-2.2.1.tar.bz2 && cd pjproject-2.2.1/ 
export CFLAGS="$CFLAGS -fPIC" 
./configure && make dep && make 
cd pjsip-apps/src/python/ 
sudo python setup.py install 

Я хотел бы также отметить, что я сделал это в виртуальной машине (Ubuntu 14.04), потому что (насколько Я могу сказать) Ubuntu 12.04 в компилятор есть ошибка, которая приводит к его сегментации:

$ sudo python setup.py install 
running install 
running build 
running build_py 
creating build 
creating build/lib.linux-x86_64-2.7 
copying pjsua.py -> build/lib.linux-x86_64-2.7 
running build_ext 
building '_pjsua' extension 
creating build/temp.linux-x86_64-2.7 
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -DPJ_AUTOCONF=1 -I/home/isaac_witmer/Downloads/pjproject-2.2.1/pjlib/include -I/home/isaac_witmer/Downloads/pjproject-2.2.1/pjlib-util/include -I/home/isaac_witmer/Downloads/pjproject-2.2.1/pjnath/include -I/home/isaac_witmer/Downloads/pjproject-2.2.1/pjmedia/include -I/home/isaac_witmer/Downloads/pjproject-2.2.1/pjsip/include -I/usr/include/python2.7 -c _pjsua.c -o build/temp.linux-x86_64-2.7/_pjsua.o 
_pjsua.c: In function ‘py_pjsua_enum_transports’: 
_pjsua.c:1202:17: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] 
_pjsua.c: In function ‘py_pjsua_conf_get_port_info’: 
_pjsua.c:2338:9: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] 
_pjsua.c: In function ‘py_pjsua_get_snd_dev’: 
_pjsua.c:2714:9: warning: variable ‘status’ set but not used [-Wunused-but-set-variable] 
In file included from _pjsua.c:20:0: 
_pjsua.h: In function ‘PyObj_pjsip_cred_info_delete’: 
_pjsua.h:71:13: internal compiler error: Segmentation fault 
Please submit a full bug report, 
with preprocessed source if appropriate. 
See <file:///usr/share/doc/gcc-4.6/README.Bugs> for instructions. 
Preprocessed source stored into /tmp/ccDoI9J3.out file, please attach this to your bugreport. 
error: command 'gcc' failed with exit status 1 
+0

Также при установке пакета python (установка python setup.py) убедитесь, что у вас нет кэшированной старой версии. Чтобы удалить старую версию, удалите pjsua и затем удалите старые файлы установки, если это необходимо (например, cd /usr/local/lib/python2.7/dist-packages && rm pjsua-2.5.5.egg-info pjsua.py pjsua.pyc _pjsua.so) – userx

+0

Не совместим с Python ≥ 16.04 –

1

Я явно опоздал на вечеринку, но я отвечаю в любом случае, так что это может помочь кому-то еще. Через несколько часов после потоотделения были обнаружены эти простые шаги для установки pjsua. Эти команды также устанавливают для вас все зависимости. Я использовал это на UBUNTU, не уверен, что он работает в другом месте. Для этого вам необходимо удалить и удалить существующие пакеты pjsua.

sudo apt-get install -y software-properties-common # To make add-apt-repository work 
sudo add-apt-repository ppa:dennis.guse/sip-tools 
sudo apt-get update 
sudo apt-get install python-pjsua 
sudo apt-get install python-pjsua2 

Чтобы проверить, если все прошло хорошо:

python 
import pjsua 

Nots уверен, почему официальная страница не имеет этих команд, которые могут сэкономить много времени. Я получил эту документацию от here.

Чтобы запустить пример файл:

wget http://svn.pjsip.org/repos/pjproject/trunk/pjsip-apps/src/python/samples/simplecall.py 
python simplecall.py sip:ipaddress:portnumber 
+0

Я могу подтвердить, что эти инструкции работают на Ubuntu 14.04! - Я отредактировал, чтобы исправить некоторые опечатки. – TinkerTank

+0

Спасибо! @TumbleCow – Maddy

+0

Не совместим с Ubuntu ≥ 16.04 –