英文:
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 "/home/ynx/notebook/instance.py", line 2, in <module>
import filegetter
ModuleNotFoundError: No module named 'filegetter'
But if I run an interactive shell: python
>>> import filegetter
>>>
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('/path/to')
where the full path of filegetter.py
would be /path/to/filegetter.py
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论