This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all \u003cpre\u003e\u003ccode\u003e blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks"); } } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); } })(); (function(){ try { var __m = "github.com"; var __re = new RegExp('^' + "github\\.com" + '
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length \u003e 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
This repository was archived by the owner on Dec 30, 2020. It is now read-only.

Latest commit

History

99 Commits

Folders and files

NameName
Last commit message
Last commit date

Repository files navigation

Obsolete

This project is not maintained anymore. Please use CPython instead. It has Python 3.9 and all the latest packages, and builds XCFrameworks for MacOSX, iOS and simulator simultaneously.

Python3 for iOS -- with partial fork() and exec() ability

This project is a patch of Python-3.7.1, designed to make it compile on iOS. Python becomes a framework, and your programs call python_main(argc, argv) to execute python scripts.

This framework was designed to be used in conjunction with Blinkshell, OpenTerm or iVim, but it can be used independently.

Installation (the easy way):

In your Xcode project, use the menu File -> "Swift Packages" -> "Add Package Dependency". In the window that opens, enter the address for this repository (https://github.com/holzschu/python3-ios.git).

In the rightmost column, you will see "Swift Package Dependencies", and under it "Python". Under "Referenced Binaries", you have all the libraries, precompiled, as "xcframework". You can link with them, embed them, and Xcode will extract the iOS or Simulator version as needed.

Compilation (the hard way):

  • type ./compilePython.sh. It will download the required packages, compile Python for iOS and the simulator, and create the XCframeworks.

Once you have compiled the Python3-ios framework, you can link it with your favorite app (I've done it with Blinkshell, OpenTerm and iVim).

Installing scripts and commands on your device

Once you have a working app with the Python3 framework installed and liked, you still need to transfer the Python scripts on your device. The easiest way is to use the Github release.

On your iDevice (iPhone, iPad...):

  • Download the archive: curl -OL https://github.com/holzschu/python3_ios/releases/download/v1.0/release.tar.gz
  • Expand the archive: tar xzf release.tar.gz
  • Move the directories to their place: mv bin ../Library, mv bin3 ../Library, mv lib ../Library

This will let you access all the modules and commands. Inside the shell, typing a command that is defined by a Python script and placed inside $HOME/Library/bin will work (so pip3 works, diff.pyworks, etc).

Installing new packages

This installation comes with a lot of pre-installed packages (try pip3 freeze for a complete list).

If you need to install more packages, you have two choices:

  • pip3 install packagename will work if the package is pure Python (if there are no C or C++ source files to compile) (that is, most of the time).
  • If the package needs to compile a module, then you can't install locally. You will need to edit the Xcode project, add module source files and add the module to config.c.

Jupyter, numpy, matplotlib

This version of Python can run Jupyter locally, without a network connection. You can even have multiple notebooks open at the same time. All the packages required are present in Python-3.7.1/Lib/site-packages/ (which you installed on your device). To start a notebook, type: jupyter-notebook in the shell.

To run Jupyter, we need to have several copie of Python3 running simultaneously (one for the server, one for each client). Given the limitations of iOS, this is done by having several frameworks, with slightly different names, loaded as required. The limitation is: you can't run more than 10 python3 scripts at the same time.

The latest commits of Blinkshell and OpenTerm contain the required changes to work with Jupyter.

About

Python-3.7.1, ported to iOS, with workaround for fork/exec

Resources

Stars

145 stars

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages