模块以语法错误的名称 space 导入?
Module gets imported under a syntactically false name space?
我正在学习 O'Riley Head First Python(第 2 版)课程。
在某一时刻,您将创建一个 Web 应用程序并将其部署到 python任何地方(第 5 章)。
Web 应用程序使用两个函数,从先前创建的模块中导入。
模块名为 vsearch.py。我还创建了一个 readme.txt 和一个 setup.py 并使用 setuptools 使用 :
创建了一个源分发文件
python3 setup.py sdist
setup.py的代码如下:
from setuptools import setup
setup(
name = "vsearch",
version = "1.0",
description = "The Head First Python Seach Tools",
author = "HF Python 2e",
author_email = "hfpy2e@gmail.com",
url = "headfirstlabs.com",
py_modules = ["vsearch"],
)
源分发文件的创建没有错误,并创建了一个名为 vsearch-1.0.tar.gz
的文件
然后文件会上传到 python任何地方,并使用以下命令通过控制台安装:
python3 -m pip install vsearch-1.0.tar.gz --user
控制台输出:
15:36 ~/mysite $ python3 -m pip install vsearch-1.0.tar.gz --user
Looking in links: /usr/share/pip-wheels
Processing ./vsearch-1.0.tar.gz
Building wheels for collected packages: vsearch
Running setup.py bdist_wheel for vsearch ... done
Stored in directory: /home/Mohr/.cache/pip/wheels/85/fd/4e/5302d6f3b92e4057d341443ed5ef0402eb04994663282c12f7
Successfully built vsearch
Installing collected packages: vsearch
Found existing installation: vsearch 1.0
Uninstalling vsearch-1.0:
Successfully uninstalled vsearch-1.0
Successfully installed vsearch-1.0
现在,当我尝试 运行 我的网络应用程序时,出现以下错误:
2020-03-24 16:18:14,592: Error running WSGI application
2020-03-24 16:18:14,592: ModuleNotFoundError: No module named 'vsearch'
2020-03-24 16:18:14,593: File "/var/www/mohr_eu_pythonanywhere_com_wsgi.py", line 16, in <module>
2020-03-24 16:18:14,593: from vsearch4web import app as application # noqa
2020-03-24 16:18:14,593:
2020-03-24 16:18:14,593: File "/home/Mohr/mysite/vsearch4web.py", line 3, in <module>
2020-03-24 16:18:14,593: from vsearch import search4letters
从这个错误判断,我认为无法找到 "vsearch",因为它被安装为 "vsearch-1.0"。但是,当我尝试将此行更改为:
from vsearch-1.0 import search4letters
我理所当然地得到一个语法错误,因为我不能用这种方式寻址模块。那么我能做些什么呢?在开始创建模块时,我在 setup.py 文件中添加了一个版本号,因为根据讲座,这是很好的做法。 Setuptools 随后会自动创建以“-1.0”结尾的源分发文件。此外,当使用上面显示的命令导入它时,我会自动将 importet 获取为 "vsearch-1.0",而由于错误的语法,我无法在我的 python 代码中引用。
我是不是做错了什么?有没有办法在另一个命名空间下导入它?有没有办法在我的 python 代码中引用 "vsearch-1.0" 而不会出现语法错误?
pip install --user
(强调--user
)将软件包安装到您的用户目录:/home/Mohr/.local/lib/pythonX.Y/site-packages/
.
对于 运行 您的 WSGI 应用程序,您可能使用了用户安装的模块不可用的虚拟环境。要在 venv 中使用模块,您必须在 venv 中安装所有内容。因此,在终端中激活 venv 并使用 venv 的 pip
:
安装模块
pip install vsearch-1.0.tar.gz
PythonAnywhere 上安装了不同的 python3
版本。当您使用 python3 -m pip
或 pip3
安装某些东西时,您使用的默认 python3 可能与您的网络应用程序的 python 版本设置不匹配。使用 python3.7
和 pip3.7
或 python3.6
和 pip3.6
等以确保 --user
安装。
我正在学习 O'Riley Head First Python(第 2 版)课程。 在某一时刻,您将创建一个 Web 应用程序并将其部署到 python任何地方(第 5 章)。
Web 应用程序使用两个函数,从先前创建的模块中导入。
模块名为 vsearch.py。我还创建了一个 readme.txt 和一个 setup.py 并使用 setuptools 使用 :
创建了一个源分发文件python3 setup.py sdist
setup.py的代码如下:
from setuptools import setup
setup(
name = "vsearch",
version = "1.0",
description = "The Head First Python Seach Tools",
author = "HF Python 2e",
author_email = "hfpy2e@gmail.com",
url = "headfirstlabs.com",
py_modules = ["vsearch"],
)
源分发文件的创建没有错误,并创建了一个名为 vsearch-1.0.tar.gz
的文件然后文件会上传到 python任何地方,并使用以下命令通过控制台安装: python3 -m pip install vsearch-1.0.tar.gz --user
控制台输出:
15:36 ~/mysite $ python3 -m pip install vsearch-1.0.tar.gz --user
Looking in links: /usr/share/pip-wheels
Processing ./vsearch-1.0.tar.gz
Building wheels for collected packages: vsearch
Running setup.py bdist_wheel for vsearch ... done
Stored in directory: /home/Mohr/.cache/pip/wheels/85/fd/4e/5302d6f3b92e4057d341443ed5ef0402eb04994663282c12f7
Successfully built vsearch
Installing collected packages: vsearch
Found existing installation: vsearch 1.0
Uninstalling vsearch-1.0:
Successfully uninstalled vsearch-1.0
Successfully installed vsearch-1.0
现在,当我尝试 运行 我的网络应用程序时,出现以下错误:
2020-03-24 16:18:14,592: Error running WSGI application
2020-03-24 16:18:14,592: ModuleNotFoundError: No module named 'vsearch'
2020-03-24 16:18:14,593: File "/var/www/mohr_eu_pythonanywhere_com_wsgi.py", line 16, in <module>
2020-03-24 16:18:14,593: from vsearch4web import app as application # noqa
2020-03-24 16:18:14,593:
2020-03-24 16:18:14,593: File "/home/Mohr/mysite/vsearch4web.py", line 3, in <module>
2020-03-24 16:18:14,593: from vsearch import search4letters
从这个错误判断,我认为无法找到 "vsearch",因为它被安装为 "vsearch-1.0"。但是,当我尝试将此行更改为:
from vsearch-1.0 import search4letters
我理所当然地得到一个语法错误,因为我不能用这种方式寻址模块。那么我能做些什么呢?在开始创建模块时,我在 setup.py 文件中添加了一个版本号,因为根据讲座,这是很好的做法。 Setuptools 随后会自动创建以“-1.0”结尾的源分发文件。此外,当使用上面显示的命令导入它时,我会自动将 importet 获取为 "vsearch-1.0",而由于错误的语法,我无法在我的 python 代码中引用。
我是不是做错了什么?有没有办法在另一个命名空间下导入它?有没有办法在我的 python 代码中引用 "vsearch-1.0" 而不会出现语法错误?
pip install --user
(强调--user
)将软件包安装到您的用户目录:/home/Mohr/.local/lib/pythonX.Y/site-packages/
.
对于 运行 您的 WSGI 应用程序,您可能使用了用户安装的模块不可用的虚拟环境。要在 venv 中使用模块,您必须在 venv 中安装所有内容。因此,在终端中激活 venv 并使用 venv 的 pip
:
pip install vsearch-1.0.tar.gz
PythonAnywhere 上安装了不同的 python3
版本。当您使用 python3 -m pip
或 pip3
安装某些东西时,您使用的默认 python3 可能与您的网络应用程序的 python 版本设置不匹配。使用 python3.7
和 pip3.7
或 python3.6
和 pip3.6
等以确保 --user
安装。