Python在运行文件时无法导入模块,但可以在交互式shell中导入该模块。

huangapple go评论65阅读模式
英文:

python can't import module when running a file, but can import the module in interactive shell

问题

filegetter 是由他人开发并通过 python setup.py install 安装的模块。

这里有一个测试文件。

#instance.py
import filegetter

当我运行

/home/ynx/miniconda3/bin/python /home/ynx/notebook/instance.py

它显示:

Traceback (most recent call last):
  File "/home/ynx/notebook/instance.py", line 2, in <module>
    import filegetter
ModuleNotFoundError: No module named 'filegetter'

但如果我运行交互式 shell: python

>>> import filegetter
>>>

它可以正常工作。我确信相同的 Python 可执行文件被使用,为什么以文件模式导入它,应该如何解决?

英文:

I got a strange problem.

filegetter is a module developed by someone else and installed with python setup.py install.

Here is a test file.

#instance.py
import filegetter

when I run

/home/ynx/miniconda3/bin/python /home/ynx/notebook/instance.py

it says:

Traceback (most recent call last):
  File &quot;/home/ynx/notebook/instance.py&quot;, line 2, in &lt;module&gt;
    import filegetter
ModuleNotFoundError: No module named &#39;filegetter&#39;

But if I run an interactive shell: python

&gt;&gt;&gt; import filegetter
&gt;&gt;&gt;

It works.
I am sure the same python bin is used by check which, why and how can I import it in the file mode?

答案1

得分: 0

这似乎是与 sys.path 有关的问题。当你运行 Python shell 时,会将当前目录的路径添加到 sys.path 中,使得在该目录中的模块可以被导入。要使一个模块对所有的 Python 程序可用,将其存储在用户站点目录中,你可以通过以下方式找到它:

$ python -m site --user-site

或者,将一个名为 usercustomize.py 的脚本放在用户站点目录中,手动添加路径到 sys.path

import sys
sys.path.append('/path/to')

其中 filegetter.py 的完整路径将是 /path/to/filegetter.py

英文:

This looks like a problem with sys.path. When you run the Python shell, the path to the current directory is added to sys.path, making modules in this directory import-able. To make a module available to all of your Python programs, store it in the user site directory, which you can find with

$ python -m site --user-site

Alternatively, place a script called usercustomize.py in the user site directory, which manually adds paths to sys.path:

import sys
sys.path.append(&#39;/path/to&#39;)

where the full path of filegetter.py would be /path/to/filegetter.py

huangapple
  • 本文由 发表于 2023年3月1日 12:52:48
  • 转载请务必保留本文链接:https://go.coder-hub.com/75599689.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定