mirror of
https://gitflic.ru/project/openide/openide.git
synced 2025-12-15 11:53:49 +07:00
`_pydevd_bundle.smart_step_into` is skipped while building `pydevd-pycharm` distribution for PyPI GitOrigin-RevId: 31f0edada3c31d57f8d6a2db07aa2e8aa925a3de
202 lines
6.6 KiB
Python
202 lines
6.6 KiB
Python
r'''
|
|
Full setup, used to distribute the debugger backend to PyPi.
|
|
|
|
Note that this is mostly so that users can do:
|
|
|
|
pip install pydevd
|
|
|
|
in a machine for doing remote-debugging, as a local installation with the IDE should have
|
|
everything already distributed.
|
|
|
|
Reference on wheels:
|
|
https://hynek.me/articles/sharing-your-labor-of-love-pypi-quick-and-dirty/
|
|
http://lucumr.pocoo.org/2014/1/27/python-on-wheels/
|
|
|
|
Another (no wheels): https://jamie.curle.io/blog/my-first-experience-adding-package-pypi/
|
|
|
|
See:
|
|
|
|
build_tools\pydevd_release_process.txt
|
|
|
|
for release process.
|
|
'''
|
|
|
|
|
|
import os
|
|
import sys
|
|
from distutils.extension import Extension
|
|
|
|
from setuptools import setup
|
|
from setuptools.dist import Distribution
|
|
|
|
|
|
class BinaryDistribution(Distribution):
|
|
def is_pure(self):
|
|
return False
|
|
|
|
|
|
data_files = []
|
|
|
|
|
|
def accept_file(f):
|
|
f = f.lower()
|
|
for ext in '.py .dll .so .dylib .txt .cpp .h .bat .c .sh .md .txt'.split():
|
|
if f.endswith(ext):
|
|
return True
|
|
|
|
return f in ['readme', 'makefile']
|
|
|
|
|
|
def add_directory_to_datafiles(datafiles, dir):
|
|
datafiles.append((dir, [os.path.join(dir, f) for f in os.listdir(dir) if accept_file(f)]))
|
|
for root, dirs, files in os.walk(dir):
|
|
for d in dirs:
|
|
datafiles.append((os.path.join(root, d), [os.path.join(root, d, f) for f in os.listdir(os.path.join(root, d)) if accept_file(f)]))
|
|
|
|
|
|
def accept_extension(f):
|
|
f = f.lower()
|
|
for ext in '.pyd .so .c'.split():
|
|
if f.endswith(ext):
|
|
return True
|
|
return False
|
|
|
|
|
|
def add_extensions_to_datafiles(datafiles, dir):
|
|
datafiles.append((dir, [os.path.join(dir, f) for f in os.listdir(dir) if accept_extension(f)]))
|
|
|
|
|
|
add_directory_to_datafiles(data_files, 'pydevd_attach_to_process')
|
|
add_extensions_to_datafiles(data_files, '_pydevd_bundle')
|
|
add_extensions_to_datafiles(data_files, '_pydevd_frame_eval')
|
|
|
|
|
|
def _get_version_from_file():
|
|
with open(os.path.join(os.path.dirname(os.path.abspath(__file__)), 'VERSION')) as version_file:
|
|
version_str = version_file.read().strip()
|
|
return version_str
|
|
|
|
|
|
def _replace_version_placeholder_in_file(filepath, version_str, version_placeholder="@@BUILD_NUMBER@@"):
|
|
with open(filepath, 'r') as file:
|
|
file_text = file.read()
|
|
result = file_text.replace(version_placeholder, version_str)
|
|
with open(filepath, 'w') as file:
|
|
file.write(result)
|
|
|
|
|
|
def _replace_version_placeholder(version_str):
|
|
pydevd_filepath = os.path.dirname(os.path.abspath(__file__))
|
|
pydevd_comm_filepath = os.path.join(os.path.join(pydevd_filepath, '_pydevd_bundle'), 'pydevd_comm.py')
|
|
_replace_version_placeholder_in_file(pydevd_comm_filepath, version_str)
|
|
|
|
|
|
version = _get_version_from_file()
|
|
_replace_version_placeholder(version)
|
|
|
|
here = os.path.abspath(os.path.dirname(__file__))
|
|
try:
|
|
README = open(os.path.join(here, 'README.rst')).read()
|
|
except IOError:
|
|
README = ''
|
|
|
|
args = dict(
|
|
name='pydevd-pycharm',
|
|
version=version,
|
|
description='PyCharm Debugger (used in PyCharm and PyDev)',
|
|
long_description=README,
|
|
author='JetBrains, Fabio Zadrozny and others',
|
|
url='https://github.com/JetBrains/intellij-community',
|
|
license='Apache 2.0',
|
|
packages=[
|
|
'_pydev_bundle',
|
|
'_pydev_imps',
|
|
'_pydev_runfiles',
|
|
'_pydevd_bundle',
|
|
'_pydevd_bundle.smart_step_into',
|
|
'_pydevd_frame_eval',
|
|
'pydev_ipython',
|
|
# 'pydev_sitecustomize', -- Not actually a package (not added)
|
|
'pydevd_attach_to_process',
|
|
'pydevd_concurrency_analyser',
|
|
'pydevd_plugins',
|
|
'pydevd_plugins.extensions',
|
|
],
|
|
py_modules=[
|
|
# 'interpreterInfo', -- Not needed for debugger
|
|
# 'pycompletionserver', -- Not needed for debugger
|
|
'pydev_app_engine_debug_startup',
|
|
# 'pydev_coverage', -- Not needed for debugger
|
|
# 'pydev_pysrc', -- Not needed for debugger
|
|
'pydevconsole',
|
|
'pydevd_file_utils',
|
|
'pydevd',
|
|
'pydevd_pycharm',
|
|
'pydevd_tracing',
|
|
# 'runfiles', -- Not needed for debugger
|
|
'setup_cython', # Distributed to clients. See: https://github.com/fabioz/PyDev.Debugger/issues/102
|
|
# 'setup', -- Should not be included as a module
|
|
],
|
|
classifiers=[
|
|
'Development Status :: 6 - Mature',
|
|
'Environment :: Console',
|
|
'Intended Audience :: Developers',
|
|
|
|
'License :: OSI Approved :: Apache Software License',
|
|
|
|
'Operating System :: MacOS :: MacOS X',
|
|
'Operating System :: Microsoft :: Windows',
|
|
'Operating System :: POSIX',
|
|
'Programming Language :: Python',
|
|
'Programming Language :: Python :: 2',
|
|
'Programming Language :: Python :: 2.7',
|
|
'Programming Language :: Python :: 3',
|
|
'Programming Language :: Python :: 3.4',
|
|
'Programming Language :: Python :: 3.5',
|
|
'Programming Language :: Python :: 3.6',
|
|
'Programming Language :: Python :: 3.7',
|
|
'Programming Language :: Python :: 3.8',
|
|
'Programming Language :: Python :: 3.9',
|
|
'Programming Language :: Python :: 3.10',
|
|
'Programming Language :: Python :: 3.11',
|
|
'Programming Language :: Python :: 3.12',
|
|
'Topic :: Software Development :: Debuggers',
|
|
],
|
|
entry_points={
|
|
'console_scripts': [
|
|
'pydevd = pydevd:main',
|
|
],
|
|
},
|
|
data_files=data_files,
|
|
keywords=['pydev', 'pydevd', 'pydev.debugger', 'pycharm'],
|
|
include_package_data=True,
|
|
zip_safe=False,
|
|
)
|
|
|
|
args_with_binaries = args.copy()
|
|
|
|
if sys.platform not in ('darwin', 'win32'):
|
|
args_with_binaries.update(dict(
|
|
distclass=BinaryDistribution,
|
|
ext_modules=[
|
|
# In this setup, don't even try to compile with cython, just go with the .c file which should've
|
|
# been properly generated from a tested version.
|
|
Extension('_pydevd_bundle.pydevd_cython', ['_pydevd_bundle/pydevd_cython.c',])
|
|
]
|
|
))
|
|
if (3, 6) <= sys.version_info <= (3, 10):
|
|
from setup_cython import get_frame_eval_extension_name
|
|
frame_eval_extension_name = get_frame_eval_extension_name()
|
|
args_with_binaries["ext_modules"].append(
|
|
# In this setup, don't even try to compile with cython, just go with the .c file which should've
|
|
# been properly generated from a tested version.
|
|
Extension('_pydevd_frame_eval.pydevd_frame_evaluator', ['_pydevd_frame_eval/%s.c' % frame_eval_extension_name,])
|
|
)
|
|
|
|
try:
|
|
setup(**args_with_binaries)
|
|
except:
|
|
# Compile failed: just setup without compiling cython deps.
|
|
setup(**args)
|
|
sys.stdout.write('Plain-python version of pydevd-pycharm installed (cython speedups not available).\n')
|