#python #conda #cythonize
#python #conda #cythonize
Вопрос:
У меня есть setup.py
скрипт (см. Ниже), который выполняет cytonization моего пакета python. У меня также есть meta.yaml
(см. Ниже) для сборки пакета conda.
Как мне избежать того, чтобы файлы .py
и .pyc
были объединены внутри пакета conda ( .tar.bz2
)?
Я уже попробовал несколько предложений из связанных вопросов о переполнении стека:
- добавление
MANIFEST.in
содержащегоexclude *.py
, - замена
packages=find_packages()
вsetup.py
наpackages=find_packages(exclude=['*.py.'])
Любые предложения приветствуются!
setup.py
from setuptools import setup, find_packages
import os
import sys
from distutils.extension import Extension
import fnmatch
from Cython.Distutils import build_ext
def find_files(directory, pattern, exclude_dirs=None):
"""
Recurse through a directory and find all files matching a pattern, excluding the directories from the list
exclude_dirs.
"""
exclude_dirs = exclude_dirs or []
for root, dirs, files in os.walk(directory):
for basename in files:
if fnmatch.fnmatch(basename, pattern):
if all(ex_dir not in root for ex_dir in exclude_dirs):
filename = os.path.join(root, basename)
# For module name, remove leading ./, replace / with . and omit .py extension
modname = filename.replace('/', '.')[2:-3]
yield (modname, filename)
def make_extension(extension_name, extension_path):
"""
Generate an Extension object from its dotted name and path.
"""
return Extension(extension_name, [extension_path], extra_compile_args=["-O3", "-Wall"], extra_link_args=['-g'])
# Build list of c extensions to be compiled, exclude detector ideas, test and legacy code
extension_paths = find_files('./my_package', '*.py')
extensions = [make_extension(extension_name, extension_path) for extension_name, extension_path in extension_paths]
setup(
name="my-package",
version="0.2.dev",
packages=find_packages(),
test_suite="tests",
install_requires=[
'cython',
'numpy',
'pyyaml',
'matplotlib',
],
ext_modules=extensions,
cmdclass={'build_ext': build_ext}
)
meta.yaml
package:
name: my-package
version: "0.2.dev"
source:
path: .
build:
number: {{ environ.get('BUILD_NUMBER', 0) }}
script: python setup.py install --single-version-externally-managed --record=record.txt
include_recipe: False
preserve_egg_dir: True
requirements:
build:
- python
- cython
run:
- python
- numpy
- pyyaml
- matplotlib