4

所以我一直在努力学习 Python的最后一个练习,它指出在我运行我一直在研究的程序之前,你必须像这样设置 Pythonpath 环境变量:

export PYTHONPATH=$PYTHONPATH:.

我已经这样做了,在它不起作用之后(我假设这就是为什么当我尝试运行我的程序时,我得到一个 ImportError),我对 pythonpath 做了一些研究。它本质上是说 Pythonpath 是在哪里寻找要导入的模块。所以我将 Pythonpath 设置为我要导入的模块的实际位置,但仍然无济于事。

这是我的目录:

- User/_myname_/python_stuff/projects/GothonWeb
    - bin/
        - __init__.py
        - app.py
    - gothonweb/
        - __init__.py
        - maps.py
    - templates (web.py)
        - game.html
        - index.html
        - layout.html
    - so forth and so on.

我试图运行 app.py,它试图导入 main.py 模块:

from gothonweb import maps

但我仍然收到此错误:

Traceback (most recent call last):
File "python_stuff/projects/GothonWeb/bin/app.py", line 2, in <module>
from gothonweb import maps
ImportError: No module named gothonweb

有谁知道怎么回事?哦,还有一些其他的细节。在 Mac Os X Lion 上运行 Python 2.7,如果有帮助的话。

4

3 回答 3

6

像这样运行应用程序:

$ cd ~/path/to/gothonweb/
python bin/app.py

但是,如果您这样做:

$ cd bin/   # WRONG! WRONG! WRONG!
$ python app.py  # WRONG! WRONG! WRONG!

很多用户倾向于犯这个错误,这里是 Zed Shaw 的一个很好的解释,关于为什么不这样运行你的应用程序!

那么你做错了。在所有 python 项目中,您不会 cd 进入较低的目录来运行东西。您留在顶部并从那里运行所有内容,以便所有系统都可以访问所有模块和文件。

于 2012-06-21T01:25:29.057 回答
3

可以在 python 中添加到您的 python 路径,最简单的方法是在模块的顶部。

import sys
sys.path.append(stringofpath)

您可以回忆一下要添加的每个路径。

stringofpath是您的项目/path/to/dir/所在的目录。不是您的项目目录。然后使用从项目目录开始的普通点符号​​继续下降到所有子目录。dir

在你的情况下你stringofpath'User/myname/python_stuff'

随着你的进步,你将不得不花一些认真的时间来学习你的 python 路径,有很多东西很难找到。并且环境变量——至少在 linux 中——被永久设置在/etc/environment.

于 2012-06-21T02:35:15.783 回答
0

你必须告诉 python 在哪里加载你的包(即带有__init__.py文件的文件夹)。

为了避免上面提到的错误,你可以设置PYTHONPATH你的包文件夹的绝对路径,然后无论你在哪个文件夹,python都会找到你的包。

Or you can use a virtual environment tool to help you manage these.

于 2019-09-26T03:48:34.553 回答