portable-python 1.9.9__tar.gz → 1.10.0__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.0}/DEVELOP.md +8 -15
- {portable_python-1.9.9/src/portable_python.egg-info → portable_python-1.10.0}/PKG-INFO +4 -4
- {portable_python-1.9.9 → portable_python-1.10.0}/setup.py +1 -2
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/__init__.py +10 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/external/xcpython.py +7 -7
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/versions.py +1 -1
- {portable_python-1.9.9 → portable_python-1.10.0/src/portable_python.egg-info}/PKG-INFO +4 -4
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_failed.py +1 -1
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_list.py +5 -5
- {portable_python-1.9.9 → portable_python-1.10.0}/LICENSE +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/MANIFEST.in +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/README.rst +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/SECURITY.md +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/pyproject.toml +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/requirements.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/setup.cfg +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/__main__.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/cli.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/config.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/cpython.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/external/__init__.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/external/_inspect.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/external/xtkinter.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/inspector.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python/tracking.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python.egg-info/SOURCES.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python.egg-info/dependency_links.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python.egg-info/entry_points.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python.egg-info/requires.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/src/portable_python.egg-info/top_level.txt +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_build.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_cleanup.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_inspector.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_invoker.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_prefix.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_recompress.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/tests/test_report.py +0 -0
- {portable_python-1.9.9 → portable_python-1.10.0}/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.0
|
|
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):
|
|
@@ -129,7 +129,7 @@ class LibFFI(ModuleBuilder):
|
|
|
129
129
|
|
|
130
130
|
@property
|
|
131
131
|
def version(self):
|
|
132
|
-
return self.cfg_version("3.4.
|
|
132
|
+
return self.cfg_version("3.4.8")
|
|
133
133
|
|
|
134
134
|
def c_configure_args(self):
|
|
135
135
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -176,7 +176,7 @@ class Openssl(ModuleBuilder):
|
|
|
176
176
|
def version(self):
|
|
177
177
|
# See https://endoflife.date/openssl
|
|
178
178
|
# This default here picks the most conservative longest supported version
|
|
179
|
-
return self.cfg_version("3.0.
|
|
179
|
+
return self.cfg_version("3.0.17")
|
|
180
180
|
|
|
181
181
|
def c_configure_args(self):
|
|
182
182
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -258,7 +258,7 @@ class Readline(ModuleBuilder):
|
|
|
258
258
|
|
|
259
259
|
@property
|
|
260
260
|
def url(self):
|
|
261
|
-
return self.cfg_url(self.version) or f"
|
|
261
|
+
return self.cfg_url(self.version) or f"http://ftpmirror.gnu.org/gnu/readline/readline-{self.version}.tar.gz"
|
|
262
262
|
|
|
263
263
|
@property
|
|
264
264
|
def version(self):
|
|
@@ -306,7 +306,7 @@ class Sqlite(ModuleBuilder):
|
|
|
306
306
|
|
|
307
307
|
@property
|
|
308
308
|
def version(self):
|
|
309
|
-
return self.cfg_version("3.
|
|
309
|
+
return self.cfg_version("3.50.4")
|
|
310
310
|
|
|
311
311
|
def c_configure_args(self):
|
|
312
312
|
if config_args := self.cfg_configure(self.deps_lib_dir, self.deps_lib64_dir):
|
|
@@ -373,7 +373,7 @@ class Xz(ModuleBuilder):
|
|
|
373
373
|
|
|
374
374
|
@property
|
|
375
375
|
def version(self):
|
|
376
|
-
return self.cfg_version("5.
|
|
376
|
+
return self.cfg_version("5.8.1")
|
|
377
377
|
|
|
378
378
|
def c_configure_args(self):
|
|
379
379
|
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.0
|
|
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.0}/src/portable_python.egg-info/dependency_links.txt
RENAMED
|
File without changes
|
{portable_python-1.9.9 → portable_python-1.10.0}/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
|