Установка Пакета С Файлами Cython

#python #cython #cythonize

Вопрос:

Я пытаюсь установить пакет, в котором некоторые файлы созданы с помощью Cython. Моя setup.py внешность похожа:

 import os from setuptools import setup from setuptools.command.build_py import build_py as _build_py   from Cython.Build import cythonize  def readme():  with open('README.md') as f:  return f.read()  with open("requirements.txt", "r") as fh:  requirements = fh.readlines()   def get_ext_paths(root_dir):  """get filepaths for compilation"""  paths = []   for root, dirs, files in os.walk(root_dir):  if root.startswith("mypkg/dir1") or   root.startswith("mypkg/dir2") or   root.startswith("mypkg/dir3"):  continue   for filename in files:  if os.path.splitext(filename)[1] != '.py':  continue   file_path = os.path.join(root, filename)  paths.append(file_path)   return paths  # noinspection PyPep8Naming class build_py(_build_py):   def find_package_modules(self, package, package_dir):  ext_suffix = sysconfig.get_config_var('EXT_SUFFIX')  modules = super().find_package_modules(package, package_dir)  filtered_modules = []  for (pkg, mod, filepath) in modules:  if os.path.exists(filepath.replace('.py', ext_suffix)):  continue  filtered_modules.append((pkg, mod, filepath, ))  return filtered_modules  setup(name='my-pkg',  version='0.1',  description='My description',  long_description=readme(),  classifiers=[  'Development Status :: 3 - Alpha',  'License :: OSI Approved :: MIT License',  'Programming Language :: Python :: 3.0',  'Topic :: Scientific/Engineering',  ],  keywords='my-keyword',  url='https://github.com/MyProject/mypkg',  author='First Last',  author_email='firstlast@example.com',  license='MIT',  packages=['mypkg',  'mypkg.dir0',  'mypkg.dir1',  'mypkg.dir2',  'mypkg.dir3',  'mypkg.dir3.dir4'],  ext_modules=cythonize(get_ext_paths('mypkg'), compiler_directives={'language_level': 3}),  install_requires=[req for req in requirements if req[:2] != "# "],  include_package_data=True,  zip_safe=False)  

Я могу установить версию Python с помощью

 pip install .  

Однако, независимо от того , что я запускаю для сборки setup.py , я не могу сделать версию Cython видимой за пределами пакета.

Например, внутри папок пакетов, когда я запускаю:

 from mypkg import MyClass print(MyClass.mymethod)  

Я получаю:

 lt;cyfunction MyClass.mymethod at 0x7ff2f4ef65f0gt;  

Но как только я выхожу из корневого каталога, я получаю

 lt;function MyClass.mymethod at 0x7f62b77c78b0gt;  

Я пытался

 pip install .  
 python setup.py install  
 python setup.py build_ext --inplace  
 python setup.py build_ext --inplace pip install .  
 python setup.py bdist_wheel pip install dist/my_pkg-0.1-cp38-cp38-linux_x86_64.whl  

Было бы здорово получить некоторое представление о последовательности команд, необходимых для установки версии Cython.

Комментарии:

1. Не могли бы вы уточнить, что вы подразумеваете под «Я не могу сделать версию Cython видимой за пределами пакета»? MyClass.mymethod Предполагается, что это метод, который возвращает версию Cython? Если это так, вы забываете назвать это: попробуйте print(MyClass.mymethod())

2. Я просто имел в виду это как способ проверить, запущена ли версия Python или версия Cython. Внутри корневого каталога при печати объекта функции тип выводится непосредственно как функция, но снаружи тип-это просто функция. В любом случае, код запускается, я думаю, что он просто использует медленную версию.