无法从肯定安装在我的 Web 服务器上的 html 脚本访问 python 模块?
Can't access python module from html script which is definitely installed on my web server?
我在我的服务器上安装了一个模块,可以从任何目录导入 python 文件。我已经通过创建一个 test.py
文件和 import module-name
来测试这个,当从命令行 运行 时 returns 没有错误。
但是,当我将模块导入 python 文件时,我的 index.html
中的脚本标记引用了该文件,我收到一条错误消息,指出无法在工作目录中找到该模块.我在这里使用 brython 通过脚本标记调用 python 文件。
示例 index.html
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js"> </script>
</head>
<body onload="brython()">
<script type="text/python" src="file-name.py"></script>
</body>
file-name.py
将 import module-name
产生未找到的错误。
关于如何解决这个问题有什么想法吗?
根据 Brython 的文档 Implementation of import,您必须将文件保存在具有 index.html
的文件夹中。
如果你想使用标准模块——比如sys
、os
那么你必须加载brython_stdlib.min.js
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython_stdlib.min.js"></script>
当我使用 print( sys.path )
查看它在哪些文件夹中搜索模块时,它会显示
['http://0.0.0.0:8000', 'moz-extension://dfafe65d-6769-4df9-8940-b084b18c2a0b/js/Lib/site-packages']
当我使用 print( os.getcwd() )
查看当前工作目录时,它会显示
http://0.0.0.0:8000
Bryton
是 Python 的解释器,它不使用安装在磁盘上的 Python,也不使用它的模块。它在浏览器中运行代码,并使用 AJAX
加载模块,因此它们必须可以通过 URL
访问
http://0.0.0.0:8000/main.py
http://0.0.0.0:8000/other.py
我的文件结构:
project
|
+-- index.html
|
+-- main.py
|
+-- other.py
project/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython_stdlib.min.js"></script>
</head>
<body onload="brython()">
<script type="text/python" src="main.py"></script>
</body>
</html>
project/main.py
import sys # OK
import os # OK
print('Hello World')
print( sys.path )
print( os.getcwd() )
import other # OK
import requests # ERROR
project/other.py
print('Other File')
已通过服务器测试
python3 -m http.server
编辑:
我尝试在 Linux
上使用软 link 加载模块 requests
ln -s /usr/local/lib/python3.7/dist-packages/requests/ requests
它加载了文件 requests/__init__.py
但它需要其他模块,例如 urllib3
我也必须 link。
编辑:
如果我link
ln -s /usr/local/lib/python3.7/dist-packages/ dist-packages
并添加
sys.path.append('http://0.0.0.0:8000/dist-packages')
然后在 DevTools
in Firefox
/Chrome
(选项卡:Network
)我看到它加载了 requests
所需的其他模块,但它需要很长时间时间 - 大概 30 秒。
顺便说一句: 我预计如果模块使用 C/C++ 库可能会出现问题,因为 Brython
而不是执行此代码。
因此,更复杂的模块将需要更多 links(或 link 一些文件夹
我在我的服务器上安装了一个模块,可以从任何目录导入 python 文件。我已经通过创建一个 test.py
文件和 import module-name
来测试这个,当从命令行 运行 时 returns 没有错误。
但是,当我将模块导入 python 文件时,我的 index.html
中的脚本标记引用了该文件,我收到一条错误消息,指出无法在工作目录中找到该模块.我在这里使用 brython 通过脚本标记调用 python 文件。
示例 index.html
代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js"> </script>
</head>
<body onload="brython()">
<script type="text/python" src="file-name.py"></script>
</body>
file-name.py
将 import module-name
产生未找到的错误。
关于如何解决这个问题有什么想法吗?
根据 Brython 的文档 Implementation of import,您必须将文件保存在具有 index.html
的文件夹中。
如果你想使用标准模块——比如sys
、os
那么你必须加载brython_stdlib.min.js
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython_stdlib.min.js"></script>
当我使用 print( sys.path )
查看它在哪些文件夹中搜索模块时,它会显示
['http://0.0.0.0:8000', 'moz-extension://dfafe65d-6769-4df9-8940-b084b18c2a0b/js/Lib/site-packages']
当我使用 print( os.getcwd() )
查看当前工作目录时,它会显示
http://0.0.0.0:8000
Bryton
是 Python 的解释器,它不使用安装在磁盘上的 Python,也不使用它的模块。它在浏览器中运行代码,并使用 AJAX
加载模块,因此它们必须可以通过 URL
http://0.0.0.0:8000/main.py
http://0.0.0.0:8000/other.py
我的文件结构:
project
|
+-- index.html
|
+-- main.py
|
+-- other.py
project/index.html
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython.min.js"> </script>
<script src="https://cdn.jsdelivr.net/npm/brython@3.8.9/brython_stdlib.min.js"></script>
</head>
<body onload="brython()">
<script type="text/python" src="main.py"></script>
</body>
</html>
project/main.py
import sys # OK
import os # OK
print('Hello World')
print( sys.path )
print( os.getcwd() )
import other # OK
import requests # ERROR
project/other.py
print('Other File')
已通过服务器测试
python3 -m http.server
编辑:
我尝试在 Linux
上使用软 link 加载模块requests
ln -s /usr/local/lib/python3.7/dist-packages/requests/ requests
它加载了文件 requests/__init__.py
但它需要其他模块,例如 urllib3
我也必须 link。
编辑:
如果我link
ln -s /usr/local/lib/python3.7/dist-packages/ dist-packages
并添加
sys.path.append('http://0.0.0.0:8000/dist-packages')
然后在 DevTools
in Firefox
/Chrome
(选项卡:Network
)我看到它加载了 requests
所需的其他模块,但它需要很长时间时间 - 大概 30 秒。
顺便说一句: 我预计如果模块使用 C/C++ 库可能会出现问题,因为 Brython
而不是执行此代码。
因此,更复杂的模块将需要更多 links(或 link 一些文件夹