portable-python 1.9.9__tar.gz → 1.10.1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {portable_python-1.9.9 → portable_python-1.10.1}/DEVELOP.md +8 -15
- {portable_python-1.9.9/src/portable_python.egg-info → portable_python-1.10.1}/PKG-INFO +4 -4
- {portable_python-1.9.9 → portable_python-1.10.1}/setup.py +1 -2
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/__init__.py +10 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/external/xcpython.py +9 -10
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/versions.py +1 -1
- {portable_python-1.9.9 → portable_python-1.10.1/src/portable_python.egg-info}/PKG-INFO +4 -4
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_failed.py +1 -1
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_list.py +5 -5
- {portable_python-1.9.9 → portable_python-1.10.1}/LICENSE +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/MANIFEST.in +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/README.rst +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/SECURITY.md +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/pyproject.toml +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/requirements.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/setup.cfg +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/__main__.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/cli.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/config.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/cpython.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/external/__init__.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/external/_inspect.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/external/xtkinter.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/inspector.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python/tracking.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/SOURCES.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/dependency_links.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/entry_points.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/requires.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/top_level.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_build.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_cleanup.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_inspector.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_invoker.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_prefix.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_recompress.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_report.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.1}/tests/test_setup.py +0 -0
|
@@ -1,16 +1,11 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Local development
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
ready to go.
|
|
5
|
-
|
|
6
|
-
If you don't have tox, you can run this (any python 3.6+ will do):
|
|
3
|
+
Create a dev venv:
|
|
7
4
|
|
|
8
5
|
```shell
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
.venv/bin/pip install -r requirements.txt -r tests/requirements.txt
|
|
13
|
-
.venv/bin/pip install -e .
|
|
6
|
+
uv venv
|
|
7
|
+
uv pip install -r requirements.txt -r tests/requirements.txt
|
|
8
|
+
uv pip install -e .
|
|
14
9
|
```
|
|
15
10
|
|
|
16
11
|
You can then run `portable-python` from that venv:
|
|
@@ -24,10 +19,8 @@ You can then run `portable-python` from that venv:
|
|
|
24
19
|
# Run the tests
|
|
25
20
|
|
|
26
21
|
If you have tox, just run: `tox` to run all the tests. You can also run:
|
|
27
|
-
- `tox -e
|
|
22
|
+
- `tox -e py313` to run with just one python version
|
|
28
23
|
- `tox -e style` to check PEP8 formatting
|
|
29
|
-
- `tox -r` if you changed any `requirements.txt` (`-r` is short for `--recreate`)
|
|
30
|
-
- `tox -re py39` to recreate and run `py39` only
|
|
31
24
|
- etc
|
|
32
25
|
|
|
33
26
|
If you don't have tox, you can run the tests with: `.venv/bin/pytest tests/`
|
|
@@ -49,7 +42,7 @@ You can easily run `portable-python` in a debugger.
|
|
|
49
42
|
In PyCharm for example, you would simply browse to `.venv/bin/portable-python`
|
|
50
43
|
then right-click and select "Debug portable-python".
|
|
51
44
|
You can then edit the build/run configuration in PyCharm, add some "Parameters" to it,
|
|
52
|
-
like for example `build-report 3.
|
|
45
|
+
like for example `build-report 3.13.2`, and then set breakpoints wherever you like.
|
|
53
46
|
|
|
54
47
|
There is a `--dryrun` mode that can come in very handy for rapid iterations.
|
|
55
48
|
|
|
@@ -71,5 +64,5 @@ docker run -it -v./:/src/ portable-python-jammy /bin/bash
|
|
|
71
64
|
Now inside docker, you run a build:
|
|
72
65
|
|
|
73
66
|
```shell
|
|
74
|
-
portable-python build 3.
|
|
67
|
+
portable-python build 3.13.2
|
|
75
68
|
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: portable-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.1
|
|
4
4
|
Summary: Portable python binaries
|
|
5
5
|
Home-page: https://github.com/codrsquad/portable-python
|
|
6
6
|
Author: Zoran Simic
|
|
@@ -18,7 +18,6 @@ Classifier: Operating System :: POSIX
|
|
|
18
18
|
Classifier: Operating System :: Unix
|
|
19
19
|
Classifier: Programming Language :: Python
|
|
20
20
|
Classifier: Programming Language :: Python :: 3
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.9
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -29,7 +28,7 @@ Classifier: Topic :: Software Development :: Build Tools
|
|
|
29
28
|
Classifier: Topic :: System :: Installation/Setup
|
|
30
29
|
Classifier: Topic :: System :: Software Distribution
|
|
31
30
|
Classifier: Topic :: Utilities
|
|
32
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.9
|
|
33
32
|
Description-Content-Type: text/x-rst
|
|
34
33
|
License-File: LICENSE
|
|
35
34
|
Requires-Dist: click~=8.0
|
|
@@ -45,6 +44,7 @@ Dynamic: description-content-type
|
|
|
45
44
|
Dynamic: home-page
|
|
46
45
|
Dynamic: keywords
|
|
47
46
|
Dynamic: license
|
|
47
|
+
Dynamic: license-file
|
|
48
48
|
Dynamic: project-url
|
|
49
49
|
Dynamic: requires-dist
|
|
50
50
|
Dynamic: requires-python
|
|
@@ -7,7 +7,7 @@ setup(
|
|
|
7
7
|
author="Zoran Simic zoran@simicweb.com",
|
|
8
8
|
keywords="python, portable, binary",
|
|
9
9
|
url="https://github.com/codrsquad/portable-python",
|
|
10
|
-
python_requires=">=3.
|
|
10
|
+
python_requires=">=3.9",
|
|
11
11
|
entry_points={
|
|
12
12
|
"console_scripts": [
|
|
13
13
|
"portable-python = portable_python.__main__:main",
|
|
@@ -22,7 +22,6 @@ setup(
|
|
|
22
22
|
"Operating System :: Unix",
|
|
23
23
|
"Programming Language :: Python",
|
|
24
24
|
"Programming Language :: Python :: 3",
|
|
25
|
-
"Programming Language :: Python :: 3.8",
|
|
26
25
|
"Programming Language :: Python :: 3.9",
|
|
27
26
|
"Programming Language :: Python :: 3.10",
|
|
28
27
|
"Programming Language :: Python :: 3.11",
|
|
@@ -680,6 +680,16 @@ class ModuleBuilder:
|
|
|
680
680
|
runez.decompress(path, self.m_src_build, simplify=True)
|
|
681
681
|
|
|
682
682
|
env_vars = self._get_env_vars()
|
|
683
|
+
if not PPG.config.get_value("allow-homebrew"):
|
|
684
|
+
# Remove any mention of /opt/homebrew from PATH (reduce chances of dynamic links to homebrew)
|
|
685
|
+
path_env_var = env_vars.get("PATH")
|
|
686
|
+
if path_env_var:
|
|
687
|
+
_paths = os.environ.get("PATH", "").split(":")
|
|
688
|
+
_revised = [p for p in _paths if not p.startswith("/opt/homebrew")]
|
|
689
|
+
if _revised != _paths:
|
|
690
|
+
LOG.info("Removed /opt/homebrew mentions from PATH")
|
|
691
|
+
env_vars["PATH"] = runez.joined(_revised, delimiter=":")
|
|
692
|
+
|
|
683
693
|
prev_env_vars = {}
|
|
684
694
|
for var_name, value in env_vars.items():
|
|
685
695
|
LOG.info("env %s=%s", var_name, runez.short(value, size=2048))
|
|
@@ -80,11 +80,11 @@ class Gdbm(ModuleBuilder):
|
|
|
80
80
|
|
|
81
81
|
@property
|
|
82
82
|
def url(self):
|
|
83
|
-
return self.cfg_url(self.version) or f"https://
|
|
83
|
+
return self.cfg_url(self.version) or f"https://ftpmirror.gnu.org/gnu/gdbm/gdbm-{self.version}.tar.gz"
|
|
84
84
|
|
|
85
85
|
@property
|
|
86
86
|
def version(self):
|
|
87
|
-
return self.cfg_version("1.
|
|
87
|
+
return self.cfg_version("1.26")
|
|
88
88
|
|
|
89
89
|
def c_configure_args(self):
|
|
90
90
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -93,6 +93,7 @@ class Gdbm(ModuleBuilder):
|
|
|
93
93
|
else:
|
|
94
94
|
yield "--enable-shared=no"
|
|
95
95
|
yield "--enable-static=yes"
|
|
96
|
+
yield "--enable-libgdbm-compat"
|
|
96
97
|
yield "--with-pic=yes"
|
|
97
98
|
yield "--disable-nls"
|
|
98
99
|
yield "--disable-dependency-tracking"
|
|
@@ -129,7 +130,7 @@ class LibFFI(ModuleBuilder):
|
|
|
129
130
|
|
|
130
131
|
@property
|
|
131
132
|
def version(self):
|
|
132
|
-
return self.cfg_version("3.
|
|
133
|
+
return self.cfg_version("3.5.2")
|
|
133
134
|
|
|
134
135
|
def c_configure_args(self):
|
|
135
136
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -176,7 +177,7 @@ class Openssl(ModuleBuilder):
|
|
|
176
177
|
def version(self):
|
|
177
178
|
# See https://endoflife.date/openssl
|
|
178
179
|
# This default here picks the most conservative longest supported version
|
|
179
|
-
return self.cfg_version("3.0.
|
|
180
|
+
return self.cfg_version("3.0.17")
|
|
180
181
|
|
|
181
182
|
def c_configure_args(self):
|
|
182
183
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -258,7 +259,7 @@ class Readline(ModuleBuilder):
|
|
|
258
259
|
|
|
259
260
|
@property
|
|
260
261
|
def url(self):
|
|
261
|
-
return self.cfg_url(self.version) or f"
|
|
262
|
+
return self.cfg_url(self.version) or f"http://ftpmirror.gnu.org/gnu/readline/readline-{self.version}.tar.gz"
|
|
262
263
|
|
|
263
264
|
@property
|
|
264
265
|
def version(self):
|
|
@@ -306,18 +307,16 @@ class Sqlite(ModuleBuilder):
|
|
|
306
307
|
|
|
307
308
|
@property
|
|
308
309
|
def version(self):
|
|
309
|
-
return self.cfg_version("3.
|
|
310
|
+
return self.cfg_version("3.50.4")
|
|
310
311
|
|
|
311
312
|
def c_configure_args(self):
|
|
312
313
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
313
314
|
yield config_args
|
|
314
315
|
|
|
315
316
|
else:
|
|
316
|
-
yield "--
|
|
317
|
-
yield "--enable-static=yes"
|
|
317
|
+
yield "--disable-shared"
|
|
318
318
|
yield "--disable-tcl"
|
|
319
319
|
yield "--disable-readline"
|
|
320
|
-
yield "--with-pic=yes"
|
|
321
320
|
|
|
322
321
|
def _do_linux_compile(self):
|
|
323
322
|
self.run_configure("./configure", self.c_configure_args())
|
|
@@ -373,7 +372,7 @@ class Xz(ModuleBuilder):
|
|
|
373
372
|
|
|
374
373
|
@property
|
|
375
374
|
def version(self):
|
|
376
|
-
return self.cfg_version("5.
|
|
375
|
+
return self.cfg_version("5.8.1")
|
|
377
376
|
|
|
378
377
|
def c_configure_args(self):
|
|
379
378
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -74,7 +74,7 @@ class VersionFamily:
|
|
|
74
74
|
class CPythonFamily(VersionFamily):
|
|
75
75
|
"""Implementation for cpython"""
|
|
76
76
|
|
|
77
|
-
min_version = "3.
|
|
77
|
+
min_version = "3.9" # Earliest non-EOL known to compile well
|
|
78
78
|
|
|
79
79
|
@runez.cached_property
|
|
80
80
|
def client(self):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: portable-python
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.10.1
|
|
4
4
|
Summary: Portable python binaries
|
|
5
5
|
Home-page: https://github.com/codrsquad/portable-python
|
|
6
6
|
Author: Zoran Simic
|
|
@@ -18,7 +18,6 @@ Classifier: Operating System :: POSIX
|
|
|
18
18
|
Classifier: Operating System :: Unix
|
|
19
19
|
Classifier: Programming Language :: Python
|
|
20
20
|
Classifier: Programming Language :: Python :: 3
|
|
21
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
22
21
|
Classifier: Programming Language :: Python :: 3.9
|
|
23
22
|
Classifier: Programming Language :: Python :: 3.10
|
|
24
23
|
Classifier: Programming Language :: Python :: 3.11
|
|
@@ -29,7 +28,7 @@ Classifier: Topic :: Software Development :: Build Tools
|
|
|
29
28
|
Classifier: Topic :: System :: Installation/Setup
|
|
30
29
|
Classifier: Topic :: System :: Software Distribution
|
|
31
30
|
Classifier: Topic :: Utilities
|
|
32
|
-
Requires-Python: >=3.
|
|
31
|
+
Requires-Python: >=3.9
|
|
33
32
|
Description-Content-Type: text/x-rst
|
|
34
33
|
License-File: LICENSE
|
|
35
34
|
Requires-Dist: click~=8.0
|
|
@@ -45,6 +44,7 @@ Dynamic: description-content-type
|
|
|
45
44
|
Dynamic: home-page
|
|
46
45
|
Dynamic: keywords
|
|
47
46
|
Dynamic: license
|
|
47
|
+
Dynamic: license-file
|
|
48
48
|
Dynamic: project-url
|
|
49
49
|
Dynamic: requires-dist
|
|
50
50
|
Dynamic: requires-python
|
|
@@ -7,7 +7,7 @@ def test_build_bogus_platform(cli):
|
|
|
7
7
|
def test_failed_build(cli):
|
|
8
8
|
cli.run("-tmacos-arm64", "build", "3.12.0")
|
|
9
9
|
assert cli.failed
|
|
10
|
-
assert "Error while compiling xz:5.
|
|
10
|
+
assert "Error while compiling xz:5.8.1: ForbiddenHttpError" in cli.logged
|
|
11
11
|
assert "Overall compilation failed:" in cli.logged
|
|
12
12
|
|
|
13
13
|
|
|
@@ -7,7 +7,7 @@ REST_CLIENT = RestClient()
|
|
|
7
7
|
GH_CPYTHON_SAMPLE = """
|
|
8
8
|
[
|
|
9
9
|
{"ref": "refs/tags/v3.9.7"},
|
|
10
|
-
{"ref": "refs/tags/v3.
|
|
10
|
+
{"ref": "refs/tags/v3.13.3"},
|
|
11
11
|
{"ref": "refs/tags/v3.5.10"}
|
|
12
12
|
]
|
|
13
13
|
"""
|
|
@@ -15,7 +15,7 @@ GH_CPYTHON_SAMPLE = """
|
|
|
15
15
|
PYTHON_ORG_SAMPLE = """
|
|
16
16
|
<a href="3.9.5/">3.9.5/</a>
|
|
17
17
|
<a href="3.9.6/">3.9.6/</a>
|
|
18
|
-
<a href="3.
|
|
18
|
+
<a href="3.13.2/">3.13.2/</a>
|
|
19
19
|
<a href="3.5.10/">3.5.10/</a>
|
|
20
20
|
"""
|
|
21
21
|
|
|
@@ -34,12 +34,12 @@ def test_list(cli, monkeypatch):
|
|
|
34
34
|
assert setup.python_spec.version == PPG.cpython.latest
|
|
35
35
|
|
|
36
36
|
cp = CPythonFamily()
|
|
37
|
-
assert str(cp.latest) == "3.
|
|
37
|
+
assert str(cp.latest) == "3.13.2"
|
|
38
38
|
|
|
39
39
|
monkeypatch.setattr(PPG.cpython, "_versions", None)
|
|
40
40
|
cli.run("list")
|
|
41
41
|
assert cli.succeeded
|
|
42
|
-
assert cli.logged.stdout.contents().strip() == "cpython:\n 3.
|
|
42
|
+
assert cli.logged.stdout.contents().strip() == "cpython:\n 3.13: 3.13.2\n 3.9: 3.9.6"
|
|
43
43
|
|
|
44
44
|
cli.run("list", "--json")
|
|
45
45
|
assert cli.succeeded
|
|
@@ -52,4 +52,4 @@ def test_list(cli, monkeypatch):
|
|
|
52
52
|
monkeypatch.setattr(PPG.cpython, "_versions", None)
|
|
53
53
|
cli.run("-c", cli.tests_path("sample-config1.yml"), "list")
|
|
54
54
|
assert cli.succeeded
|
|
55
|
-
assert cli.logged.stdout.contents().strip() == "cpython:\n 3.
|
|
55
|
+
assert cli.logged.stdout.contents().strip() == "cpython:\n 3.13: 3.13.3\n 3.9: 3.9.7"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{portable_python-1.9.9 → portable_python-1.10.1}/src/portable_python.egg-info/entry_points.txt
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|