Toshaan Bharvani
11 months ago
commit
d9631bb19c
10 changed files with 3449 additions and 0 deletions
@ -0,0 +1,30 @@
@@ -0,0 +1,30 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||
From: David Malcolm <dmalcolm@redhat.com> |
||||
Date: Wed, 13 Jan 2010 21:25:18 +0000 |
||||
Subject: [PATCH] 00001: Fixup distutils/unixccompiler.py to remove standard |
||||
library path from rpath Was Patch0 in ivazquez' python3000 specfile |
||||
|
||||
--- |
||||
Lib/distutils/unixccompiler.py | 9 +++++++++ |
||||
1 file changed, 9 insertions(+) |
||||
|
||||
diff --git a/Lib/distutils/unixccompiler.py b/Lib/distutils/unixccompiler.py |
||||
index d00c48981e..0283a28c19 100644 |
||||
--- a/Lib/distutils/unixccompiler.py |
||||
+++ b/Lib/distutils/unixccompiler.py |
||||
@@ -82,6 +82,15 @@ class UnixCCompiler(CCompiler): |
||||
if sys.platform == "cygwin": |
||||
exe_extension = ".exe" |
||||
|
||||
+ def _fix_lib_args(self, libraries, library_dirs, runtime_library_dirs): |
||||
+ """Remove standard library path from rpath""" |
||||
+ libraries, library_dirs, runtime_library_dirs = super()._fix_lib_args( |
||||
+ libraries, library_dirs, runtime_library_dirs) |
||||
+ libdir = sysconfig.get_config_var('LIBDIR') |
||||
+ if runtime_library_dirs and (libdir in runtime_library_dirs): |
||||
+ runtime_library_dirs.remove(libdir) |
||||
+ return libraries, library_dirs, runtime_library_dirs |
||||
+ |
||||
def preprocess(self, source, output_file=None, macros=None, |
||||
include_dirs=None, extra_preargs=None, extra_postargs=None): |
||||
fixed_args = self._fix_compile_args(None, macros, include_dirs) |
@ -0,0 +1,204 @@
@@ -0,0 +1,204 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> |
||||
Date: Mon, 15 Feb 2021 12:19:27 +0100 |
||||
Subject: [PATCH] 00251: Change user install location |
||||
MIME-Version: 1.0 |
||||
Content-Type: text/plain; charset=UTF-8 |
||||
Content-Transfer-Encoding: 8bit |
||||
|
||||
Set values of base and platbase in sysconfig from /usr |
||||
to /usr/local when RPM build is not detected |
||||
to make pip and similar tools install into separate location. |
||||
|
||||
Set values of prefix and exec_prefix in distutils install command |
||||
to /usr/local if executable is /usr/bin/python* and RPM build |
||||
is not detected to make distutils and pypa/distutils install into separate location. |
||||
|
||||
Fedora Change: https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||
Downstream only. |
||||
|
||||
We've tried to rework in Fedora 36/Python 3.10 to follow https://bugs.python.org/issue43976 |
||||
but we have identified serious problems with that approach, |
||||
see https://bugzilla.redhat.com/2026979 or https://bugzilla.redhat.com/2097183 |
||||
|
||||
pypa/distutils integration: https://github.com/pypa/distutils/pull/70 |
||||
|
||||
Co-authored-by: Petr Viktorin <encukou@gmail.com> |
||||
Co-authored-by: Miro Hrončok <miro@hroncok.cz> |
||||
Co-authored-by: Michal Cyprian <m.cyprian@gmail.com> |
||||
Co-authored-by: Lumír Balhar <frenzy.madness@gmail.com> |
||||
--- |
||||
Lib/distutils/command/install.py | 8 ++++-- |
||||
Lib/site.py | 9 +++++- |
||||
Lib/sysconfig.py | 49 +++++++++++++++++++++++++++++++- |
||||
Lib/test/test_sysconfig.py | 17 +++++++++-- |
||||
4 files changed, 77 insertions(+), 6 deletions(-) |
||||
|
||||
diff --git a/Lib/distutils/command/install.py b/Lib/distutils/command/install.py |
||||
index 01d5331a63..79f70f0de4 100644 |
||||
--- a/Lib/distutils/command/install.py |
||||
+++ b/Lib/distutils/command/install.py |
||||
@@ -159,6 +159,8 @@ class install(Command): |
||||
|
||||
negative_opt = {'no-compile' : 'compile'} |
||||
|
||||
+ # Allow Fedora to add components to the prefix |
||||
+ _prefix_addition = getattr(sysconfig, '_prefix_addition', '') |
||||
|
||||
def initialize_options(self): |
||||
"""Initializes options.""" |
||||
@@ -441,8 +443,10 @@ def finalize_unix(self): |
||||
raise DistutilsOptionError( |
||||
"must not supply exec-prefix without prefix") |
||||
|
||||
- self.prefix = os.path.normpath(sys.prefix) |
||||
- self.exec_prefix = os.path.normpath(sys.exec_prefix) |
||||
+ self.prefix = ( |
||||
+ os.path.normpath(sys.prefix) + self._prefix_addition) |
||||
+ self.exec_prefix = ( |
||||
+ os.path.normpath(sys.exec_prefix) + self._prefix_addition) |
||||
|
||||
else: |
||||
if self.exec_prefix is None: |
||||
diff --git a/Lib/site.py b/Lib/site.py |
||||
index 69670d9d7f..104cb93899 100644 |
||||
--- a/Lib/site.py |
||||
+++ b/Lib/site.py |
||||
@@ -377,8 +377,15 @@ def getsitepackages(prefixes=None): |
||||
return sitepackages |
||||
|
||||
def addsitepackages(known_paths, prefixes=None): |
||||
- """Add site-packages to sys.path""" |
||||
+ """Add site-packages to sys.path |
||||
+ |
||||
+ '/usr/local' is included in PREFIXES if RPM build is not detected |
||||
+ to make packages installed into this location visible. |
||||
+ |
||||
+ """ |
||||
_trace("Processing global site-packages") |
||||
+ if ENABLE_USER_SITE and 'RPM_BUILD_ROOT' not in os.environ: |
||||
+ PREFIXES.insert(0, "/usr/local") |
||||
for sitedir in getsitepackages(prefixes): |
||||
if os.path.isdir(sitedir): |
||||
addsitedir(sitedir, known_paths) |
||||
diff --git a/Lib/sysconfig.py b/Lib/sysconfig.py |
||||
index ebe3711827..55af57b335 100644 |
||||
--- a/Lib/sysconfig.py |
||||
+++ b/Lib/sysconfig.py |
||||
@@ -103,6 +103,11 @@ |
||||
else: |
||||
_INSTALL_SCHEMES['venv'] = _INSTALL_SCHEMES['posix_venv'] |
||||
|
||||
+# For a brief period of time in the Fedora 36 life cycle, |
||||
+# this installation scheme existed and was documented in the release notes. |
||||
+# For backwards compatibility, we keep it here (at least on 3.10 and 3.11). |
||||
+_INSTALL_SCHEMES['rpm_prefix'] = _INSTALL_SCHEMES['posix_prefix'] |
||||
+ |
||||
|
||||
# NOTE: site.py has copy of this function. |
||||
# Sync it when modify this function. |
||||
@@ -162,6 +167,19 @@ def joinuser(*args): |
||||
}, |
||||
} |
||||
|
||||
+# This is used by distutils.command.install in the stdlib |
||||
+# as well as pypa/distutils (e.g. bundled in setuptools). |
||||
+# The self.prefix value is set to sys.prefix + /local/ |
||||
+# if neither RPM build nor virtual environment is |
||||
+# detected to make distutils install packages |
||||
+# into the separate location. |
||||
+# https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||
+if (not (hasattr(sys, 'real_prefix') or |
||||
+ sys.prefix != sys.base_prefix) and |
||||
+ 'RPM_BUILD_ROOT' not in os.environ): |
||||
+ _prefix_addition = '/local' |
||||
+ |
||||
+ |
||||
_SCHEME_KEYS = ('stdlib', 'platstdlib', 'purelib', 'platlib', 'include', |
||||
'scripts', 'data') |
||||
|
||||
@@ -258,11 +276,40 @@ def _extend_dict(target_dict, other_dict): |
||||
target_dict[key] = value |
||||
|
||||
|
||||
+_CONFIG_VARS_LOCAL = None |
||||
+ |
||||
+ |
||||
+def _config_vars_local(): |
||||
+ # This function returns the config vars with prefixes amended to /usr/local |
||||
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||
+ global _CONFIG_VARS_LOCAL |
||||
+ if _CONFIG_VARS_LOCAL is None: |
||||
+ _CONFIG_VARS_LOCAL = dict(get_config_vars()) |
||||
+ _CONFIG_VARS_LOCAL['base'] = '/usr/local' |
||||
+ _CONFIG_VARS_LOCAL['platbase'] = '/usr/local' |
||||
+ return _CONFIG_VARS_LOCAL |
||||
+ |
||||
+ |
||||
def _expand_vars(scheme, vars): |
||||
res = {} |
||||
if vars is None: |
||||
vars = {} |
||||
- _extend_dict(vars, get_config_vars()) |
||||
+ |
||||
+ # when we are not in a virtual environment or an RPM build |
||||
+ # we change '/usr' to '/usr/local' |
||||
+ # to avoid surprises, we explicitly check for the /usr/ prefix |
||||
+ # Python virtual environments have different prefixes |
||||
+ # we only do this for posix_prefix, not to mangle the venv scheme |
||||
+ # posix_prefix is used by sudo pip install |
||||
+ # we only change the defaults here, so explicit --prefix will take precedence |
||||
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||
+ if (scheme == 'posix_prefix' and |
||||
+ _PREFIX == '/usr' and |
||||
+ 'RPM_BUILD_ROOT' not in os.environ): |
||||
+ _extend_dict(vars, _config_vars_local()) |
||||
+ else: |
||||
+ _extend_dict(vars, get_config_vars()) |
||||
+ |
||||
if os.name == 'nt': |
||||
# On Windows we want to substitute 'lib' for schemes rather |
||||
# than the native value (without modifying vars, in case it |
||||
diff --git a/Lib/test/test_sysconfig.py b/Lib/test/test_sysconfig.py |
||||
index d96371d242..72b028435f 100644 |
||||
--- a/Lib/test/test_sysconfig.py |
||||
+++ b/Lib/test/test_sysconfig.py |
||||
@@ -111,8 +111,19 @@ def test_get_path(self): |
||||
for scheme in _INSTALL_SCHEMES: |
||||
for name in _INSTALL_SCHEMES[scheme]: |
||||
expected = _INSTALL_SCHEMES[scheme][name].format(**config_vars) |
||||
+ tested = get_path(name, scheme) |
||||
+ # https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe |
||||
+ if tested.startswith('/usr/local'): |
||||
+ # /usr/local should only be used in posix_prefix |
||||
+ self.assertEqual(scheme, 'posix_prefix') |
||||
+ # Fedora CI runs tests for venv and virtualenv that check for other prefixes |
||||
+ self.assertEqual(sys.prefix, '/usr') |
||||
+ # When building the RPM of Python, %check runs this with RPM_BUILD_ROOT set |
||||
+ # Fedora CI runs this with RPM_BUILD_ROOT unset |
||||
+ self.assertNotIn('RPM_BUILD_ROOT', os.environ) |
||||
+ tested = tested.replace('/usr/local', '/usr') |
||||
self.assertEqual( |
||||
- os.path.normpath(get_path(name, scheme)), |
||||
+ os.path.normpath(tested), |
||||
os.path.normpath(expected), |
||||
) |
||||
|
||||
@@ -336,7 +347,7 @@ def test_get_config_h_filename(self): |
||||
self.assertTrue(os.path.isfile(config_h), config_h) |
||||
|
||||
def test_get_scheme_names(self): |
||||
- wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv'] |
||||
+ wanted = ['nt', 'posix_home', 'posix_prefix', 'posix_venv', 'nt_venv', 'venv', 'rpm_prefix'] |
||||
if HAS_USER_BASE: |
||||
wanted.extend(['nt_user', 'osx_framework_user', 'posix_user']) |
||||
self.assertEqual(get_scheme_names(), tuple(sorted(wanted))) |
||||
@@ -348,6 +359,8 @@ def test_symlink(self): # Issue 7880 |
||||
cmd = "-c", "import sysconfig; print(sysconfig.get_platform())" |
||||
self.assertEqual(py.call_real(*cmd), py.call_link(*cmd)) |
||||
|
||||
+ @unittest.skipIf('RPM_BUILD_ROOT' not in os.environ, |
||||
+ "Test doesn't expect Fedora's paths") |
||||
def test_user_similar(self): |
||||
# Issue #8759: make sure the posix scheme for the users |
||||
# is similar to the global posix_prefix one |
@ -0,0 +1,54 @@
@@ -0,0 +1,54 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Miro=20Hron=C4=8Dok?= <miro@hroncok.cz> |
||||
Date: Thu, 11 Jul 2019 13:44:13 +0200 |
||||
Subject: [PATCH] 00328: Restore pyc to TIMESTAMP invalidation mode as default |
||||
in rpmbuild |
||||
|
||||
Since Fedora 31, the $SOURCE_DATE_EPOCH is set in rpmbuild to the latest |
||||
%changelog date. This makes Python default to the CHECKED_HASH pyc |
||||
invalidation mode, bringing more reproducible builds traded for an import |
||||
performance decrease. To avoid that, we don't default to CHECKED_HASH |
||||
when $RPM_BUILD_ROOT is set (i.e. when we are building RPM packages). |
||||
|
||||
See https://src.fedoraproject.org/rpms/redhat-rpm-config/pull-request/57#comment-27426 |
||||
Downstream only: only used when building RPM packages |
||||
Ideally, we should talk to upstream and explain why we don't want this |
||||
--- |
||||
Lib/py_compile.py | 3 ++- |
||||
Lib/test/test_py_compile.py | 2 ++ |
||||
2 files changed, 4 insertions(+), 1 deletion(-) |
||||
|
||||
diff --git a/Lib/py_compile.py b/Lib/py_compile.py |
||||
index 388614e51b..db52725016 100644 |
||||
--- a/Lib/py_compile.py |
||||
+++ b/Lib/py_compile.py |
||||
@@ -70,7 +70,8 @@ class PycInvalidationMode(enum.Enum): |
||||
|
||||
|
||||
def _get_default_invalidation_mode(): |
||||
- if os.environ.get('SOURCE_DATE_EPOCH'): |
||||
+ if (os.environ.get('SOURCE_DATE_EPOCH') and not |
||||
+ os.environ.get('RPM_BUILD_ROOT')): |
||||
return PycInvalidationMode.CHECKED_HASH |
||||
else: |
||||
return PycInvalidationMode.TIMESTAMP |
||||
diff --git a/Lib/test/test_py_compile.py b/Lib/test/test_py_compile.py |
||||
index a4a52b180d..e53f5d92aa 100644 |
||||
--- a/Lib/test/test_py_compile.py |
||||
+++ b/Lib/test/test_py_compile.py |
||||
@@ -19,6 +19,7 @@ def without_source_date_epoch(fxn): |
||||
def wrapper(*args, **kwargs): |
||||
with os_helper.EnvironmentVarGuard() as env: |
||||
env.unset('SOURCE_DATE_EPOCH') |
||||
+ env.unset('RPM_BUILD_ROOT') |
||||
return fxn(*args, **kwargs) |
||||
return wrapper |
||||
|
||||
@@ -29,6 +30,7 @@ def with_source_date_epoch(fxn): |
||||
def wrapper(*args, **kwargs): |
||||
with os_helper.EnvironmentVarGuard() as env: |
||||
env['SOURCE_DATE_EPOCH'] = '123456789' |
||||
+ env.unset('RPM_BUILD_ROOT') |
||||
return fxn(*args, **kwargs) |
||||
return wrapper |
||||
|
@ -0,0 +1,103 @@
@@ -0,0 +1,103 @@
|
||||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 |
||||
From: =?UTF-8?q?Tom=C3=A1=C5=A1=20Hrn=C4=8Diar?= <thrnciar@redhat.com> |
||||
Date: Tue, 7 Dec 2021 14:41:59 +0100 |
||||
Subject: [PATCH] 00371: Revert "bpo-1596321: Fix threading._shutdown() for the |
||||
main thread (GH-28549) (GH-28589)" |
||||
|
||||
This reverts commit 38c67738c64304928c68d5c2bd78bbb01d979b94. It |
||||
introduced regression causing FreeIPA's tests to fail. |
||||
|
||||
For more info see: |
||||
https://bodhi.fedoraproject.org/updates/FEDORA-2021-e152ce5f31 |
||||
https://github.com/GrahamDumpleton/mod_wsgi/issues/730 |
||||
--- |
||||
Lib/test/test_threading.py | 33 --------------------------------- |
||||
Lib/threading.py | 25 ++++++++----------------- |
||||
2 files changed, 8 insertions(+), 50 deletions(-) |
||||
|
||||
diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py |
||||
index 9c6561c099..84714c03fe 100644 |
||||
--- a/Lib/test/test_threading.py |
||||
+++ b/Lib/test/test_threading.py |
||||
@@ -956,39 +956,6 @@ def test_debug_deprecation(self): |
||||
b'is deprecated and will be removed in Python 3.12') |
||||
self.assertIn(msg, err) |
||||
|
||||
- def test_import_from_another_thread(self): |
||||
- # bpo-1596321: If the threading module is first import from a thread |
||||
- # different than the main thread, threading._shutdown() must handle |
||||
- # this case without logging an error at Python exit. |
||||
- code = textwrap.dedent(''' |
||||
- import _thread |
||||
- import sys |
||||
- |
||||
- event = _thread.allocate_lock() |
||||
- event.acquire() |
||||
- |
||||
- def import_threading(): |
||||
- import threading |
||||
- event.release() |
||||
- |
||||
- if 'threading' in sys.modules: |
||||
- raise Exception('threading is already imported') |
||||
- |
||||
- _thread.start_new_thread(import_threading, ()) |
||||
- |
||||
- # wait until the threading module is imported |
||||
- event.acquire() |
||||
- event.release() |
||||
- |
||||
- if 'threading' not in sys.modules: |
||||
- raise Exception('threading is not imported') |
||||
- |
||||
- # don't wait until the thread completes |
||||
- ''') |
||||
- rc, out, err = assert_python_ok("-c", code) |
||||
- self.assertEqual(out, b'') |
||||
- self.assertEqual(err, b'') |
||||
- |
||||
|
||||
class ThreadJoinOnShutdown(BaseTestCase): |
||||
|
||||
diff --git a/Lib/threading.py b/Lib/threading.py |
||||
index 4f72938551..18c10e6489 100644 |
||||
--- a/Lib/threading.py |
||||
+++ b/Lib/threading.py |
||||
@@ -1546,29 +1546,20 @@ def _shutdown(): |
||||
|
||||
global _SHUTTING_DOWN |
||||
_SHUTTING_DOWN = True |
||||
+ # Main thread |
||||
+ tlock = _main_thread._tstate_lock |
||||
+ # The main thread isn't finished yet, so its thread state lock can't have |
||||
+ # been released. |
||||
+ assert tlock is not None |
||||
+ assert tlock.locked() |
||||
+ tlock.release() |
||||
+ _main_thread._stop() |
||||
|
||||
# Call registered threading atexit functions before threads are joined. |
||||
# Order is reversed, similar to atexit. |
||||
for atexit_call in reversed(_threading_atexits): |
||||
atexit_call() |
||||
|
||||
- # Main thread |
||||
- if _main_thread.ident == get_ident(): |
||||
- tlock = _main_thread._tstate_lock |
||||
- # The main thread isn't finished yet, so its thread state lock can't |
||||
- # have been released. |
||||
- assert tlock is not None |
||||
- assert tlock.locked() |
||||
- tlock.release() |
||||
- _main_thread._stop() |
||||
- else: |
||||
- # bpo-1596321: _shutdown() must be called in the main thread. |
||||
- # If the threading module was not imported by the main thread, |
||||
- # _main_thread is the thread which imported the threading module. |
||||
- # In this case, ignore _main_thread, similar behavior than for threads |
||||
- # spawned by C libraries or using _thread.start_new_thread(). |
||||
- pass |
||||
- |
||||
# Join all non-deamon threads |
||||
while True: |
||||
with _shutdown_locks_lock: |
@ -0,0 +1,55 @@
@@ -0,0 +1,55 @@
|
||||
"""Checks if all *.pyc files have later mtime than their *.py files.""" |
||||
|
||||
import os |
||||
import sys |
||||
from importlib.util import cache_from_source |
||||
from pathlib import Path |
||||
|
||||
|
||||
RPM_BUILD_ROOT = os.environ.get('RPM_BUILD_ROOT', '') |
||||
|
||||
# ...cpython-3X.pyc |
||||
# ...cpython-3X.opt-1.pyc |
||||
# ...cpython-3X.opt-2.pyc |
||||
LEVELS = (None, 1, 2) |
||||
|
||||
# list of globs of test and other files that we expect not to have bytecode |
||||
not_compiled = [ |
||||
'/usr/bin/*', |
||||
'*/test/bad_coding.py', |
||||
'*/test/bad_coding2.py', |
||||
'*/test/badsyntax_*.py', |
||||
'*/lib2to3/tests/data/bom.py', |
||||
'*/lib2to3/tests/data/crlf.py', |
||||
'*/lib2to3/tests/data/different_encoding.py', |
||||
'*/lib2to3/tests/data/false_encoding.py', |
||||
'*/lib2to3/tests/data/py2_test_grammar.py', |
||||
'*.debug-gdb.py', |
||||
] |
||||
|
||||
|
||||
def bytecode_expected(path): |
||||
path = Path(path[len(RPM_BUILD_ROOT):]) |
||||
for glob in not_compiled: |
||||
if path.match(glob): |
||||
return False |
||||
return True |
||||
|
||||
|
||||
failed = 0 |
||||
compiled = (path for path in sys.argv[1:] if bytecode_expected(path)) |
||||
for path in compiled: |
||||
to_check = (cache_from_source(path, optimization=opt) for opt in LEVELS) |
||||
f_mtime = os.path.getmtime(path) |
||||
for pyc in to_check: |
||||
c_mtime = os.path.getmtime(pyc) |
||||
if c_mtime < f_mtime: |
||||
print('Failed bytecompilation timestamps check: ' |
||||
f'Bytecode file {pyc} is older than source file {path}', |
||||
file=sys.stderr) |
||||
failed += 1 |
||||
|
||||
if failed: |
||||
print(f'\n{failed} files failed bytecompilation timestamps check.', |
||||
file=sys.stderr) |
||||
sys.exit(1) |
@ -0,0 +1,35 @@
@@ -0,0 +1,35 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
|
||||
<!-- Copyright 2017 Zbigniew Jędrzejewski-Szmek --> |
||||
<application> |
||||
<id type="desktop">idle3.desktop</id> |
||||
<name>IDLE3</name> |
||||
<metadata_licence>CC0</metadata_licence> |
||||
<project_license>Python-2.0</project_license> |
||||
<summary>Python 3 Integrated Development and Learning Environment</summary> |
||||
<description> |
||||
<p> |
||||
IDLE is Python’s Integrated Development and Learning Environment. |
||||
The GUI is uniform between Windows, Unix, and Mac OS X. |
||||
IDLE provides an easy way to start writing, running, and debugging |
||||
Python code. |
||||
</p> |
||||
<p> |
||||
IDLE is written in pure Python, and uses the tkinter GUI toolkit. |
||||
It provides: |
||||
</p> |
||||
<ul> |
||||
<li>a Python shell window (interactive interpreter) with colorizing of code input, output, and error messages,</li> |
||||
<li>a multi-window text editor with multiple undo, Python colorizing, smart indent, call tips, auto completion, and other features,</li> |
||||
<li>search within any window, replace within editor windows, and search through multiple files (grep),</li> |
||||
<li>a debugger with persistent breakpoints, stepping, and viewing of global and local namespaces.</li> |
||||
</ul> |
||||
</description> |
||||
<url type="homepage">https://docs.python.org/3/library/idle.html</url> |
||||
<screenshots> |
||||
<screenshot type="default">http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-main-window.png</screenshot> |
||||
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-class-browser.png</screenshot> |
||||
<screenshot>http://in.waw.pl/~zbyszek/fedora/idle3-appdata/idle3-code-viewer.png</screenshot> |
||||
</screenshots> |
||||
<update_contact>zbyszek@in.waw.pl</update_contact> |
||||
</application> |
@ -0,0 +1,11 @@
@@ -0,0 +1,11 @@
|
||||
[Desktop Entry] |
||||
Version=1.0 |
||||
Name=IDLE 3 |
||||
Comment=Python 3 Integrated Development and Learning Environment |
||||
Exec=idle3 %F |
||||
TryExec=idle3 |
||||
Terminal=false |
||||
Type=Application |
||||
Icon=idle3 |
||||
Categories=Development;IDE; |
||||
MimeType=text/x-python; |
@ -0,0 +1,109 @@
@@ -0,0 +1,109 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK----- |
||||
|
||||
mQINBFq+ToQBEADRYvIVtbK6owynD3j3nxwpW2KEk/p+aDvtXmc2SR2dBcZ8sFW2 |
||||
R5vEsG8d3/D3wgv5pcL3KfNNXQYUnXVbobrFUUWQYc79qIsE3MgiPf5NVOtwKPUR |
||||
i5g9YJgKvpBxkQfqp3LYGm9ZBtwo3DVLA3yn7KsazCmAgTNFJYw7ku1XxgmIzY6K |
||||
5J30DfbJiqDqj4f9GslCCCCH3qiPnuLG/HUyVLHMpbWlaiy9NI0GcaLxjJewHj9w |
||||
W2D2lydkxe5JGo7egUkV3ILcuLVSVKA35SKY27dYqfuyqp9tAzaRbjDYjsYdHA6G |
||||
BqrNrKBn/GwlFDPrVdcvN3ZSY2wMLTxWE3Axc/FweuHxFnou/80FwX7F3JD+oEQ6 |
||||
rofmcxOBCC7J98I7HZAhP9jBn88XIS2hztbLq8d6rZJZRtcz0k61VR0ddO+TrFmf |
||||
9rMYCPgCckRtVxeFIVIabrN1IzKynLFeo040h8hSGswd6YKDOVwjJY6Oa6EmVefZ |
||||
a8QSt4+M65RSzH6SEPY008F3nJUAK6MEkzTak+tFltZNrVWu8p2xd1j9nmxAwEhZ |
||||
/lgbxLqzYgaUWmfyHeZ8yVA0MhHzdiAL8nVUEdG3KecIq0RWCJLGLWWIjd6KAJl1 |
||||
yAmhRYKK/sjPDsL3elHsFACfZbyx3o5GGQNlas1FYoPLWbaNGaJtgFTF2QARAQAB |
||||
tCtQYWJsbyBHYWxpbmRvIFNhbGdhZG8gPHBhYmxvZ3NhbEBnbWFpbC5jb20+iQJO |
||||
BBMBCgA4FiEEoDXIwZIZuoIezqhrZOYo+NaEaW0FAlq+ToQCGwMFCwkIBwMFFQoJ |
||||
CAsFFgIDAQACHgECF4AACgkQZOYo+NaEaW2bmA/+PXIap2udLoUVOHxnsIBdqYwp |
||||
sv1Aj5lfIJmNhmxPbHShwp1Jg+w4urxe+2Dj5ofKVlIo1i83bQkvnKJMDXDVuc/K |
||||
P6zqhBJ3rT4Q3qx2mzX8bIfQoJ2JHuH4lkP+I7doDcHHRyeNASyk72VdQmU4twNw |
||||
Ibn8nSNV6ThKHdoPYzVnO2rZUFcGIqH5HNsvR+B7cc1MBCHsgURYwSVhSePIFGlZ |
||||
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 |
||||
=6Zb4 |
||||
-----END PGP PUBLIC KEY BLOCK----- |
Loading…
Reference in new issue