#python #linux #ubuntu #anaconda #cython
#python #linux #ubuntu #anaconda #cython
Вопрос:
Я перешел на Linux с win10. Все должно быть просто и т.д. Для работы с библиотеками и сборки на Linux … но этот простой код не создается. Я знаю, как использовать команды cython для сборки (из его руководства) и it worker на python с msvc = 2008, 2013, 2015. Но этот проклятый Linux почему-то здесь не так хорош; / и не будет собираться
HelloWorld.pyx
#cython: language_level=2
print "hello world!"
Или (та же ошибка)
HelloWorld.pyx
#cython: language_level=3
print("hello world!")
Я создаю его с помощью (это $ {fileDirname} из задачи visual code):
zsh -c ". activate py35a amp;amp; gcc --version amp;amp; python ${fileDirname}/setup.py build_ext --inplace"
setup.py
from __init__ import *
try:
from setuptools import setup
from setuptools import Extension
except ImportError:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
from Cython.Compiler.Options import directive_defaults
from Cython.Build import cythonize
import numpy
import os,sys
from sys import platform
path=current_path()
os.chdir(path)
print("CWD: %s"%path)
#this is one of my old functions (like from being a NOOB), it was making error, now I changed it (so it do not add second file with .cpp extension)...
def sources(*lst):
lst=list(lst)
for n in range(len(lst)):
lst[n] ='.pyx'
return lst
ext_modules=[
Extension("C_helloWorld",
sources=sources("helloWorld"),
),
]
for extension in ext_modules:
extension.include_dirs=[numpy.get_include()]
extension.language='c '
#extension.extra_compile_args=['-g']
#extension.extra_link_args=['-g', '-pthread']
setup(
name = 'simple test of cython',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules,
)
Это ошибка, которую я получаю:
gcc (GCC) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
No module named 'adjustText'
CWD: /home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/
Compiling helloWorld.pyx because it changed.
[1/1] Cythonizing helloWorld.pyx
running build_ext
building 'C_helloWorld' extension
gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib/python3.5/site-packages/numpy/core/include -I/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/include/python3.5m -c helloWorld.cpp -o build/temp.linux-x86_64-3.5/helloWorld.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C [enabled by default]
gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib/python3.5/site-packages/numpy/core/include -I/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/include/python3.5m -c helloWorld.cpp -o build/temp.linux-x86_64-3.5/helloWorld.o
cc1plus: warning: command line option ‘-Wstrict-prototypes’ is valid for C/ObjC but not for C [enabled by default]
g -pthread -shared -L/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib -Wl,-rpath=/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib,--no-as-needed build/temp.linux-x86_64-3.5/helloWorld.o build/temp.linux-x86_64-3.5/helloWorld.o -L/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib -lpython3.5m -o /home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/C_helloWorld.cpython-35m-x86_64-linux-gnu.so -pthread
build/temp.linux-x86_64-3.5/helloWorld.o: In function `PyInit_helloWorld':
/home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/helloWorld.cpp:698: multiple definition of `PyInit_helloWorld'
build/temp.linux-x86_64-3.5/helloWorld.o:/home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/helloWorld.cpp:698: first defined here
build/temp.linux-x86_64-3.5/helloWorld.o: In function `PyInit_helloWorld':
/home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/helloWorld.cpp:698: multiple definition of `__pyx_module_is_main_CTO__A2_CROSS_SECTIONS__helloWorld'
build/temp.linux-x86_64-3.5/helloWorld.o:/home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/helloWorld.cpp:698: first defined here
collect2: error: ld returned 1 exit status
error: command 'g ' failed with exit status 1
Решаемая путем изменения источников функций (похоже, что это была полностью моя ошибка, не связанная с Linux и cython, позор мне; /)
Теперь это дает:
gcc (GCC) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
3.5.2 |Anaconda custom (64-bit)| (default, Jul 2 2016, 17:53:06)
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)]
No module named 'adjustText'
CWD: /home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/
Compiling hello_world.pyx because it changed.
[1/1] Cythonizing hello_world.pyx
running build_ext
building 'c_hello_world' extension
gcc -pthread -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -Wstrict-prototypes -fPIC -I/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib/python3.5/site-packages/numpy/core/include -I/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/include/python3.5m -c hello_world.c -o build/temp.linux-x86_64-3.5/hello_world.o
gcc -pthread -shared -L/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib -Wl,-rpath=/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib,--no-as-needed build/temp.linux-x86_64-3.5/hello_world.o -L/home/robgrzel/ProgramFiles/Programming/Python/Miniconda3/envs/py35a/lib -lpython3.5m -o /home/robgrzel/SHARED/GOOGLE/WORKSPACE/PROJECTS/SHIPPING/CTO/A2_CROSS_SECTIONS/c_hello_world.cpython-35m-x86_64-linux-gnu.so -pthread
Tada… Но это неправильное название расширения: c_hello_world.cpython-35m-x86_64-linux-gnu.so
Комментарии:
1. Что это
sources("helloWorld")
? Этот бит выглядит необычно для меня, и я нигде не вижу определенияsources
. Если вы посмотрите на строку ссылки, она отображаетсяbuild/temp.linux-x86_64-3.5/helloWorld.o
дважды, вероятно, поэтому вы получаете несколько определений. Но я не знаю, почему это происходит дважды.2. Я тоже это замечаю, но почему это происходит? А «источники» — это kwarg для расширения? Если вы добавите «HelloWorld.pyx» в исходники и… Черт возьми, вот это было. Это какая-то старая функция годичной давности… Это единственный способ описать то, с чем я столкнулся сейчас .. s2.quickmeme.com/img/26 /…