@bjia56/portable-python 0.1.64 → 0.1.66
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.
- package/dist/cpython.d.ts +11 -0
- package/dist/cpython.js +81 -0
- package/dist/cpython.js.map +1 -0
- package/dist/graalpy.d.ts +13 -0
- package/dist/graalpy.js +69 -0
- package/dist/graalpy.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.js +30 -109
- package/dist/index.js.map +1 -1
- package/dist/types.d.ts +29 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/versions.d.ts +3 -0
- package/dist/versions.js +33 -0
- package/dist/versions.js.map +1 -0
- package/package.json +7 -3
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { IInstaller, IPortablePython, IPortablePythonOptions } from './types';
|
|
2
|
+
export default class CPythonInstaller implements IInstaller {
|
|
3
|
+
private parent;
|
|
4
|
+
private options;
|
|
5
|
+
constructor(parent: IPortablePython, options: IPortablePythonOptions);
|
|
6
|
+
get relativeExecutablePath(): string;
|
|
7
|
+
get relativePipPath(): string;
|
|
8
|
+
get pythonDistributionName(): string;
|
|
9
|
+
validateOptions(): void;
|
|
10
|
+
postInstall(): Promise<void>;
|
|
11
|
+
}
|
package/dist/cpython.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const os_1 = require("os");
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const DL_PLATFORM = (() => {
|
|
7
|
+
if ((0, os_1.platform)() == "win32") {
|
|
8
|
+
return "windows";
|
|
9
|
+
}
|
|
10
|
+
if ((0, os_1.platform)() == "freebsd") {
|
|
11
|
+
const releaseName = (0, os_1.release)();
|
|
12
|
+
const releaseMajor = parseInt(releaseName.split(".")[0]);
|
|
13
|
+
return `freebsd${releaseMajor}`;
|
|
14
|
+
}
|
|
15
|
+
return (0, os_1.platform)();
|
|
16
|
+
})();
|
|
17
|
+
const DL_ARCH = (() => {
|
|
18
|
+
if (DL_PLATFORM == "darwin") {
|
|
19
|
+
return "universal2";
|
|
20
|
+
}
|
|
21
|
+
switch ((0, os_1.arch)()) {
|
|
22
|
+
case "ia32":
|
|
23
|
+
return "i386";
|
|
24
|
+
case "x64":
|
|
25
|
+
return "x86_64";
|
|
26
|
+
case "arm64":
|
|
27
|
+
return "aarch64";
|
|
28
|
+
}
|
|
29
|
+
return (0, os_1.arch)();
|
|
30
|
+
})();
|
|
31
|
+
class CPythonInstaller {
|
|
32
|
+
parent;
|
|
33
|
+
options;
|
|
34
|
+
constructor(parent, options) {
|
|
35
|
+
this.parent = parent;
|
|
36
|
+
this.options = options;
|
|
37
|
+
}
|
|
38
|
+
get relativeExecutablePath() {
|
|
39
|
+
return (0, path_1.join)(this.pythonDistributionName, "bin", "python" + (this.options.distribution === "cosmo" ? ".com" :
|
|
40
|
+
((0, os_1.platform)() === "win32" ? ".exe" : "")));
|
|
41
|
+
}
|
|
42
|
+
get relativePipPath() {
|
|
43
|
+
if (this.options.distribution != "cosmo" && (0, os_1.platform)() === "win32") {
|
|
44
|
+
return (0, path_1.join)(this.pythonDistributionName, "Scripts", `pip${this.parent.major}.exe`);
|
|
45
|
+
}
|
|
46
|
+
return (0, path_1.join)(this.pythonDistributionName, "bin", `pip${this.parent.major}`);
|
|
47
|
+
}
|
|
48
|
+
get pythonDistributionName() {
|
|
49
|
+
if (this.parent.distribution === "cosmo") {
|
|
50
|
+
return `python-${this.parent.version}-cosmo-unknown`;
|
|
51
|
+
}
|
|
52
|
+
return `python-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;
|
|
53
|
+
}
|
|
54
|
+
validateOptions() {
|
|
55
|
+
if (this.options.implementation !== "cpython") {
|
|
56
|
+
throw Error("expected cpython implementation");
|
|
57
|
+
}
|
|
58
|
+
if (!["auto", "cosmo"].includes(this.options.distribution)) {
|
|
59
|
+
throw Error("invalid distribution");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async postInstall() {
|
|
63
|
+
if (!this.parent.isInstalled()) {
|
|
64
|
+
throw Error("something went wrong and the installation failed");
|
|
65
|
+
}
|
|
66
|
+
await (0, promises_1.chmod)(this.parent.executablePath, 0o777);
|
|
67
|
+
if (this.options.distribution != "cosmo" && (0, os_1.platform)() != "win32") {
|
|
68
|
+
// node can't create symlinks over existing files, so we create symlinks with temp names,
|
|
69
|
+
// then rename to overwrite existing files
|
|
70
|
+
await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.parent.major}_`, "file");
|
|
71
|
+
await (0, promises_1.rename)(`${this.parent.executablePath}${this.parent.major}_`, `${this.parent.executablePath}${this.parent.major}`);
|
|
72
|
+
await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.parent.major}.${this.parent.minor}_`, "file");
|
|
73
|
+
await (0, promises_1.rename)(`${this.parent.executablePath}${this.parent.major}.${this.parent.minor}_`, `${this.parent.executablePath}${this.parent.major}.${this.parent.minor}`);
|
|
74
|
+
// ensure the pip script is executable
|
|
75
|
+
await (0, promises_1.chmod)(this.parent.pipPath, 0o777);
|
|
76
|
+
await (0, promises_1.chmod)(`${this.parent.pipPath}.${this.parent.minor}`, 0o777);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.default = CPythonInstaller;
|
|
81
|
+
//# sourceMappingURL=cpython.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cpython.js","sourceRoot":"","sources":["../src/cpython.ts"],"names":[],"mappings":";;AAAA,2BAA6C;AAC7C,0CAAqD;AACrD,+BAA4B;AAI5B,MAAM,WAAW,GAAG,CAAC,GAAG,EAAE;IACtB,IAAI,IAAA,aAAQ,GAAE,IAAI,OAAO,EAAE,CAAC;QACxB,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,IAAI,IAAA,aAAQ,GAAE,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,IAAA,YAAO,GAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzD,OAAO,UAAU,YAAY,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,IAAA,aAAQ,GAAE,CAAC;AACtB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE;IAClB,IAAI,WAAW,IAAI,QAAQ,EAAE,CAAC;QAC1B,OAAO,YAAY,CAAC;IACxB,CAAC;IAED,QAAQ,IAAA,SAAI,GAAE,EAAE,CAAC;QACjB,KAAK,MAAM;YACP,OAAO,MAAM,CAAC;QAClB,KAAK,KAAK;YACN,OAAO,QAAQ,CAAC;QACpB,KAAK,OAAO;YACR,OAAO,SAAS,CAAC;IACrB,CAAC;IAED,OAAO,IAAA,SAAI,GAAE,CAAC;AAClB,CAAC,CAAC,EAAE,CAAC;AAEL,MAAqB,gBAAgB;IACb;IAAiC;IAArD,YAAoB,MAAuB,EAAU,OAA+B;QAAhE,WAAM,GAAN,MAAM,CAAiB;QAAU,YAAO,GAAP,OAAO,CAAwB;IAAG,CAAC;IAExF,IAAI,sBAAsB;QACtB,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,QAAQ,GAAG,CACvD,IAAI,CAAC,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;YAChD,CAAC,IAAA,aAAQ,GAAE,KAAK,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CACzC,CAAC,CAAC;IACP,CAAC;IAED,IAAI,eAAe;QACf,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,IAAI,IAAA,aAAQ,GAAE,KAAK,OAAO,EAAE,CAAC;YACjE,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,sBAAsB,EAAE,SAAS,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM,CAAC,CAAC;QACvF,CAAC;QACD,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,sBAAsB,EAAE,KAAK,EAAE,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;IAC/E,CAAC;IAED,IAAI,sBAAsB;QACtB,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,KAAK,OAAO,EAAE,CAAC;YACvC,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,gBAAgB,CAAC;QACzD,CAAC;QACD,OAAO,UAAU,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,WAAW,IAAI,OAAO,EAAE,CAAC;IACrE,CAAC;IAED,eAAe;QACX,IAAI,IAAI,CAAC,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YAC5C,MAAM,KAAK,CAAC,iCAAiC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,CAAC,sBAAsB,CAAC,CAAC;QACxC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,WAAW;QACb,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACpE,CAAC;QAED,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,OAAO,IAAI,IAAA,aAAQ,GAAE,IAAI,OAAO,EAAE,CAAC;YAChE,yFAAyF;YACzF,0CAA0C;YAC1C,MAAM,IAAA,kBAAO,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC;YACtF,MAAM,IAAA,iBAAM,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YACxH,MAAM,IAAA,kBAAO,EAAC,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,MAAM,CAAC,CAAC;YAC3G,MAAM,IAAA,iBAAM,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAElK,sCAAsC;YACtC,MAAM,IAAA,gBAAK,EAAC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACxC,MAAM,IAAA,gBAAK,EAAC,GAAG,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,CAAC,CAAC;QACtE,CAAC;IACL,CAAC;CACJ;AArDD,mCAqDC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { IInstaller, IPortablePython, IPortablePythonOptions } from './types';
|
|
2
|
+
export default class GraalPyInstaller implements IInstaller {
|
|
3
|
+
private parent;
|
|
4
|
+
private options;
|
|
5
|
+
private pythonMajor;
|
|
6
|
+
private pythonMinor;
|
|
7
|
+
constructor(parent: IPortablePython, options: IPortablePythonOptions);
|
|
8
|
+
get relativeExecutablePath(): string;
|
|
9
|
+
get relativePipPath(): string;
|
|
10
|
+
get pythonDistributionName(): string;
|
|
11
|
+
validateOptions(): void;
|
|
12
|
+
postInstall(): Promise<void>;
|
|
13
|
+
}
|
package/dist/graalpy.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const os_1 = require("os");
|
|
4
|
+
const promises_1 = require("fs/promises");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const DL_PLATFORM = (() => {
|
|
7
|
+
if ((0, os_1.platform)() == "win32") {
|
|
8
|
+
return "windows";
|
|
9
|
+
}
|
|
10
|
+
return (0, os_1.platform)();
|
|
11
|
+
})();
|
|
12
|
+
const DL_ARCH = (() => {
|
|
13
|
+
switch ((0, os_1.arch)()) {
|
|
14
|
+
case "x64":
|
|
15
|
+
return "x86_64";
|
|
16
|
+
case "arm64":
|
|
17
|
+
return "aarch64";
|
|
18
|
+
}
|
|
19
|
+
return (0, os_1.arch)();
|
|
20
|
+
})();
|
|
21
|
+
class GraalPyInstaller {
|
|
22
|
+
parent;
|
|
23
|
+
options;
|
|
24
|
+
pythonMajor = 3;
|
|
25
|
+
pythonMinor = 10;
|
|
26
|
+
constructor(parent, options) {
|
|
27
|
+
this.parent = parent;
|
|
28
|
+
this.options = options;
|
|
29
|
+
}
|
|
30
|
+
get relativeExecutablePath() {
|
|
31
|
+
return (0, path_1.join)(this.pythonDistributionName, "bin", "python" + ((0, os_1.platform)() === "win32" ? ".exe" : ""));
|
|
32
|
+
}
|
|
33
|
+
get relativePipPath() {
|
|
34
|
+
if ((0, os_1.platform)() === "win32") {
|
|
35
|
+
return (0, path_1.join)(this.pythonDistributionName, "Scripts", `pip${this.pythonMajor}.exe`);
|
|
36
|
+
}
|
|
37
|
+
return (0, path_1.join)(this.pythonDistributionName, "bin", `pip${this.pythonMajor}`);
|
|
38
|
+
}
|
|
39
|
+
get pythonDistributionName() {
|
|
40
|
+
return `graalpy-community-jvm-${this.parent.version}-${DL_PLATFORM}-${DL_ARCH}`;
|
|
41
|
+
}
|
|
42
|
+
validateOptions() {
|
|
43
|
+
if (this.options.implementation !== "graalpy") {
|
|
44
|
+
throw Error("expected graalpy implementation");
|
|
45
|
+
}
|
|
46
|
+
if (this.options.distribution !== "auto") {
|
|
47
|
+
throw Error("invalid distribution");
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async postInstall() {
|
|
51
|
+
if (!this.parent.isInstalled()) {
|
|
52
|
+
throw Error("something went wrong and the installation failed");
|
|
53
|
+
}
|
|
54
|
+
await (0, promises_1.chmod)(this.parent.executablePath, 0o777);
|
|
55
|
+
if ((0, os_1.platform)() != "win32") {
|
|
56
|
+
// node can't create symlinks over existing files, so we create symlinks with temp names,
|
|
57
|
+
// then rename to overwrite existing files
|
|
58
|
+
await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.pythonMajor}_`, "file");
|
|
59
|
+
await (0, promises_1.rename)(`${this.parent.executablePath}${this.pythonMajor}_`, `${this.parent.executablePath}${this.pythonMajor}`);
|
|
60
|
+
await (0, promises_1.symlink)("python", `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, "file");
|
|
61
|
+
await (0, promises_1.rename)(`${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}_`, `${this.parent.executablePath}${this.pythonMajor}.${this.pythonMinor}`);
|
|
62
|
+
// ensure the pip script is executable
|
|
63
|
+
await (0, promises_1.chmod)(this.parent.pipPath, 0o777);
|
|
64
|
+
await (0, promises_1.chmod)(`${this.parent.pipPath}.${this.pythonMinor}`, 0o777);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
exports.default = GraalPyInstaller;
|
|
69
|
+
//# sourceMappingURL=graalpy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graalpy.js","sourceRoot":"","sources":["../src/graalpy.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { IPortablePython, IPortablePythonOptions } from "./types";
|
|
2
|
+
export declare class PortablePython implements IPortablePython {
|
|
3
|
+
private _version;
|
|
4
|
+
private _installer;
|
|
3
5
|
implementation: string;
|
|
4
6
|
distribution: string;
|
|
5
7
|
installDir: string;
|
|
6
|
-
constructor(version: string, installDir?: string | null, options?:
|
|
7
|
-
private validateOptions;
|
|
8
|
+
constructor(version: string, installDir?: string | null, options?: IPortablePythonOptions);
|
|
8
9
|
/**
|
|
9
10
|
* Contains the path to the Python executable.
|
|
10
11
|
*/
|
package/dist/index.js
CHANGED
|
@@ -5,69 +5,26 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports.PortablePython = void 0;
|
|
7
7
|
const fs_1 = require("fs");
|
|
8
|
+
const promises_1 = require("fs/promises");
|
|
8
9
|
const path_1 = require("path");
|
|
9
|
-
const os_1 = require("os");
|
|
10
10
|
const stream_1 = require("stream");
|
|
11
|
-
const
|
|
11
|
+
const promises_2 = require("stream/promises");
|
|
12
12
|
const adm_zip_1 = __importDefault(require("adm-zip"));
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
const releaseMajor = parseInt(releaseName.split(".")[0]);
|
|
21
|
-
return `freebsd${releaseMajor}`;
|
|
22
|
-
}
|
|
23
|
-
return (0, os_1.platform)();
|
|
24
|
-
})();
|
|
25
|
-
const DL_ARCH = (() => {
|
|
26
|
-
if (DL_PLATFORM == "darwin") {
|
|
27
|
-
return "universal2";
|
|
28
|
-
}
|
|
29
|
-
switch ((0, os_1.arch)()) {
|
|
30
|
-
case "ia32":
|
|
31
|
-
return "i386";
|
|
32
|
-
case "x64":
|
|
33
|
-
return "x86_64";
|
|
34
|
-
case "arm64":
|
|
35
|
-
return "aarch64";
|
|
36
|
-
}
|
|
37
|
-
return (0, os_1.arch)();
|
|
38
|
-
})();
|
|
39
|
-
const VERSIONS = packageJson.portablePython;
|
|
40
|
-
function getVersions(implementation) {
|
|
41
|
-
const versions = VERSIONS[implementation].versions;
|
|
42
|
-
if (!versions) {
|
|
43
|
-
throw Error("unknown implementation");
|
|
44
|
-
}
|
|
45
|
-
return versions;
|
|
46
|
-
}
|
|
47
|
-
function getVersionBuilds(implementation) {
|
|
48
|
-
const versionBuilds = VERSIONS[implementation].versionBuilds;
|
|
49
|
-
if (!versionBuilds) {
|
|
50
|
-
throw Error("unknown implementation");
|
|
51
|
-
}
|
|
52
|
-
return versionBuilds;
|
|
53
|
-
}
|
|
54
|
-
function pickVersion(implementation, version) {
|
|
55
|
-
const versions = getVersions(implementation);
|
|
56
|
-
for (let i = 0; i < versions.length; ++i) {
|
|
57
|
-
// TODO: This doesn't handle semver correctly, e.g. 3.8.17 will match 3.8.1
|
|
58
|
-
if (versions[i].startsWith(version)) {
|
|
59
|
-
return versions[i];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
return null;
|
|
63
|
-
}
|
|
13
|
+
const versions_1 = require("./versions");
|
|
14
|
+
const cpython_1 = __importDefault(require("./cpython"));
|
|
15
|
+
const graalpy_1 = __importDefault(require("./graalpy"));
|
|
16
|
+
const INSTALLERS = new Map([
|
|
17
|
+
["cpython", cpython_1.default],
|
|
18
|
+
["graalpy", graalpy_1.default],
|
|
19
|
+
]);
|
|
64
20
|
async function download(url, dest) {
|
|
65
21
|
const res = await fetch(url);
|
|
66
22
|
const file = (0, fs_1.createWriteStream)(dest);
|
|
67
|
-
await (0,
|
|
23
|
+
await (0, promises_2.finished)(stream_1.Readable.fromWeb(res.body).pipe(file));
|
|
68
24
|
}
|
|
69
25
|
class PortablePython {
|
|
70
26
|
_version;
|
|
27
|
+
_installer;
|
|
71
28
|
implementation = "cpython";
|
|
72
29
|
distribution = "auto";
|
|
73
30
|
installDir = (0, path_1.dirname)(__dirname);
|
|
@@ -81,11 +38,19 @@ class PortablePython {
|
|
|
81
38
|
if (options.distribution) {
|
|
82
39
|
this.distribution = options.distribution;
|
|
83
40
|
}
|
|
84
|
-
this.
|
|
41
|
+
if (!INSTALLERS.has(this.implementation)) {
|
|
42
|
+
throw Error("invalid implementation");
|
|
43
|
+
}
|
|
44
|
+
const ctor = INSTALLERS.get(this.implementation);
|
|
45
|
+
this._installer = new ctor(this, {
|
|
46
|
+
implementation: this.implementation,
|
|
47
|
+
distribution: this.distribution,
|
|
48
|
+
});
|
|
49
|
+
this._installer.validateOptions();
|
|
85
50
|
if (installDir) {
|
|
86
51
|
this.installDir = installDir;
|
|
87
52
|
}
|
|
88
|
-
this._version = pickVersion(this.implementation, version);
|
|
53
|
+
this._version = (0, versions_1.pickVersion)(this.implementation, version);
|
|
89
54
|
if (!this._version) {
|
|
90
55
|
throw Error(`unknown version: ${version}`);
|
|
91
56
|
}
|
|
@@ -93,34 +58,17 @@ class PortablePython {
|
|
|
93
58
|
throw Error("no releases available for this version");
|
|
94
59
|
}
|
|
95
60
|
}
|
|
96
|
-
validateOptions() {
|
|
97
|
-
if (!["cpython", "graalpy"].includes(this.implementation)) {
|
|
98
|
-
throw Error("invalid implementation");
|
|
99
|
-
}
|
|
100
|
-
if (!["auto", "cosmo"].includes(this.distribution)) {
|
|
101
|
-
throw Error("invalid distribution");
|
|
102
|
-
}
|
|
103
|
-
if (this.implementation === "graalpy") {
|
|
104
|
-
if (this.distribution !== "auto") {
|
|
105
|
-
throw Error("invalid distribution selected for graalpy");
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
61
|
/**
|
|
110
62
|
* Contains the path to the Python executable.
|
|
111
63
|
*/
|
|
112
64
|
get executablePath() {
|
|
113
|
-
return (0, path_1.join)(this.installDir, this.
|
|
114
|
-
((0, os_1.platform)() === "win32" ? ".exe" : "")));
|
|
65
|
+
return (0, path_1.join)(this.installDir, this._installer.relativeExecutablePath);
|
|
115
66
|
}
|
|
116
67
|
/**
|
|
117
68
|
* Contains the path to the bundled pip executable.
|
|
118
69
|
*/
|
|
119
70
|
get pipPath() {
|
|
120
|
-
|
|
121
|
-
return (0, path_1.join)(this.installDir, this.pythonDistributionName, "Scripts", `pip${this.major}.exe`);
|
|
122
|
-
}
|
|
123
|
-
return (0, path_1.join)(this.installDir, this.pythonDistributionName, "bin", `pip${this.major}`);
|
|
71
|
+
return (0, path_1.join)(this.installDir, this._installer.relativePipPath);
|
|
124
72
|
}
|
|
125
73
|
/**
|
|
126
74
|
* Contains the selected Python version.
|
|
@@ -150,16 +98,13 @@ class PortablePython {
|
|
|
150
98
|
* Contains the release tag that will be downloaded.
|
|
151
99
|
*/
|
|
152
100
|
get releaseTag() {
|
|
153
|
-
return getVersionBuilds(this.implementation)[this.version];
|
|
101
|
+
return (0, versions_1.getVersionBuilds)(this.implementation)[this.version];
|
|
154
102
|
}
|
|
155
103
|
/**
|
|
156
104
|
* Contains the full name of the Python distribution.
|
|
157
105
|
*/
|
|
158
106
|
get pythonDistributionName() {
|
|
159
|
-
|
|
160
|
-
return `python-${this.version}-cosmo-unknown`;
|
|
161
|
-
}
|
|
162
|
-
return `python-${this.version}-${DL_PLATFORM}-${DL_ARCH}`;
|
|
107
|
+
return this._installer.pythonDistributionName;
|
|
163
108
|
}
|
|
164
109
|
/**
|
|
165
110
|
* Contains the path to the extracted Python distribution folder.
|
|
@@ -183,28 +128,11 @@ class PortablePython {
|
|
|
183
128
|
if (this.isInstalled()) {
|
|
184
129
|
return;
|
|
185
130
|
}
|
|
186
|
-
|
|
187
|
-
if (!this.isInstalled()) {
|
|
188
|
-
throw Error("something went wrong and the installation failed");
|
|
189
|
-
}
|
|
190
|
-
(0, fs_1.chmodSync)(this.executablePath, 0o777);
|
|
191
|
-
if (this.distribution != "cosmo" && (0, os_1.platform)() != "win32") {
|
|
192
|
-
// node can't create symlinks over existing files, so we create symlinks with temp names,
|
|
193
|
-
// then rename to overwrite existing files
|
|
194
|
-
(0, fs_1.symlinkSync)("python", `${this.executablePath}${this.major}_`, "file");
|
|
195
|
-
(0, fs_1.renameSync)(`${this.executablePath}${this.major}_`, `${this.executablePath}${this.major}`);
|
|
196
|
-
(0, fs_1.symlinkSync)("python", `${this.executablePath}${this.major}.${this.minor}_`, "file");
|
|
197
|
-
(0, fs_1.renameSync)(`${this.executablePath}${this.major}.${this.minor}_`, `${this.executablePath}${this.major}.${this.minor}`);
|
|
198
|
-
// ensure the pip script is executable
|
|
199
|
-
(0, fs_1.chmodSync)(this.pipPath, 0o777);
|
|
200
|
-
(0, fs_1.chmodSync)(`${this.pipPath}.${this.minor}`, 0o777);
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
(0, fs_1.mkdirSync)(this.installDir, { recursive: true });
|
|
131
|
+
await (0, promises_1.mkdir)(this.installDir, { recursive: true });
|
|
204
132
|
if (zipFile) {
|
|
205
133
|
const zip = new adm_zip_1.default(zipFile);
|
|
206
134
|
zip.extractAllTo(this.installDir, true);
|
|
207
|
-
|
|
135
|
+
await this._installer.postInstall();
|
|
208
136
|
return;
|
|
209
137
|
}
|
|
210
138
|
const url = `https://github.com/bjia56/portable-python/releases/download/${this.releaseTag}/${this.pythonDistributionName}.zip`;
|
|
@@ -213,8 +141,8 @@ class PortablePython {
|
|
|
213
141
|
await download(url, downloadPath);
|
|
214
142
|
const zip = new adm_zip_1.default(downloadPath);
|
|
215
143
|
zip.extractAllTo(installDir, true);
|
|
216
|
-
(0,
|
|
217
|
-
|
|
144
|
+
await (0, promises_1.rm)(downloadPath);
|
|
145
|
+
await this._installer.postInstall();
|
|
218
146
|
}
|
|
219
147
|
/**
|
|
220
148
|
* Uninstalls the Python distribution.
|
|
@@ -223,14 +151,7 @@ class PortablePython {
|
|
|
223
151
|
if (!this.isInstalled()) {
|
|
224
152
|
return;
|
|
225
153
|
}
|
|
226
|
-
await
|
|
227
|
-
if (e) {
|
|
228
|
-
reject(e);
|
|
229
|
-
}
|
|
230
|
-
else {
|
|
231
|
-
resolve();
|
|
232
|
-
}
|
|
233
|
-
}));
|
|
154
|
+
await (0, promises_1.rm)(this.extractPath, { force: true, recursive: true });
|
|
234
155
|
}
|
|
235
156
|
}
|
|
236
157
|
exports.PortablePython = PortablePython;
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface IInstallerProps {
|
|
2
|
+
pythonDistributionName: string;
|
|
3
|
+
}
|
|
4
|
+
export interface IInstaller extends IInstallerProps {
|
|
5
|
+
relativeExecutablePath: string;
|
|
6
|
+
relativePipPath: string;
|
|
7
|
+
validateOptions(): void;
|
|
8
|
+
postInstall(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
export interface IPortablePython extends IInstallerProps {
|
|
11
|
+
version: string;
|
|
12
|
+
major: string;
|
|
13
|
+
minor: string;
|
|
14
|
+
patch: string;
|
|
15
|
+
releaseTag: string;
|
|
16
|
+
implementation: string;
|
|
17
|
+
distribution: string;
|
|
18
|
+
installDir: string;
|
|
19
|
+
extractPath: string;
|
|
20
|
+
executablePath: string;
|
|
21
|
+
pipPath: string;
|
|
22
|
+
isInstalled(): boolean;
|
|
23
|
+
install(zipFile: string | null): Promise<void>;
|
|
24
|
+
uninstall(): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
export interface IPortablePythonOptions {
|
|
27
|
+
implementation?: string;
|
|
28
|
+
distribution?: string;
|
|
29
|
+
}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
package/dist/versions.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.pickVersion = exports.getVersionBuilds = exports.getVersions = void 0;
|
|
4
|
+
const packageJson = require("../package.json");
|
|
5
|
+
const VERSIONS = packageJson.portablePython;
|
|
6
|
+
function getVersions(implementation) {
|
|
7
|
+
const versions = VERSIONS[implementation].versions;
|
|
8
|
+
if (!versions) {
|
|
9
|
+
throw Error("unknown implementation");
|
|
10
|
+
}
|
|
11
|
+
return versions;
|
|
12
|
+
}
|
|
13
|
+
exports.getVersions = getVersions;
|
|
14
|
+
function getVersionBuilds(implementation) {
|
|
15
|
+
const versionBuilds = VERSIONS[implementation].versionBuilds;
|
|
16
|
+
if (!versionBuilds) {
|
|
17
|
+
throw Error("unknown implementation");
|
|
18
|
+
}
|
|
19
|
+
return versionBuilds;
|
|
20
|
+
}
|
|
21
|
+
exports.getVersionBuilds = getVersionBuilds;
|
|
22
|
+
function pickVersion(implementation, version) {
|
|
23
|
+
const versions = getVersions(implementation);
|
|
24
|
+
for (let i = 0; i < versions.length; ++i) {
|
|
25
|
+
// TODO: This doesn't handle semver correctly, e.g. 3.8.17 will match 3.8.1
|
|
26
|
+
if (versions[i].startsWith(version)) {
|
|
27
|
+
return versions[i];
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
exports.pickVersion = pickVersion;
|
|
33
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":";;;AAAA,MAAM,WAAW,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAC/C,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC;AAE5C,SAAgB,WAAW,CAAC,cAAsB;IAC9C,MAAM,QAAQ,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC;IACnD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,QAAQ,CAAC;AACpB,CAAC;AAND,kCAMC;AAED,SAAgB,gBAAgB,CAAC,cAAsB;IACnD,MAAM,aAAa,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC;IAC7D,IAAI,CAAC,aAAa,EAAE,CAAC;QACjB,MAAM,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC1C,CAAC;IACD,OAAO,aAAa,CAAC;AACzB,CAAC;AAND,4CAMC;AAED,SAAgB,WAAW,CAAC,cAAsB,EAAE,OAAe;IAC/D,MAAM,QAAQ,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC;IAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;QACvC,2EAA2E;QAC3E,IAAI,QAAQ,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAClC,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC;IACL,CAAC;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AATD,kCASC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bjia56/portable-python",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.66",
|
|
4
4
|
"description": "Portable Python",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"module": "./dist/index.mjs",
|
|
@@ -68,8 +68,12 @@
|
|
|
68
68
|
}
|
|
69
69
|
},
|
|
70
70
|
"graalpy": {
|
|
71
|
-
"versions": [
|
|
72
|
-
|
|
71
|
+
"versions": [
|
|
72
|
+
"24.0.2"
|
|
73
|
+
],
|
|
74
|
+
"versionBuilds": {
|
|
75
|
+
"24.0.2": "graalpy-v24.0.2-beta.1"
|
|
76
|
+
}
|
|
73
77
|
}
|
|
74
78
|
}
|
|
75
79
|
}
|