Python 3.6.5
我知道这一点:Why does my python not add current working directory to the path?
但是问题在于他正在做一些更复杂的事情(指的是子文件夹,但要在主文件夹中执行)。答案是简化操作或添加程序包定义。
选定的答案甚至说:“添加的是脚本目录”
但是,我的问题确实更简单:我的脚本目录未添加。
基本上,互联网上的所有教程都说:import mymodule
当我这样做时,我得到一个名称错误...
我的文件夹结构:
C:/Projects/interner
interner.py # this is the main program body
aux.py # this is the auxiliary file I would like to import into the above
我尝试过在interner.py中编码“ import aux”,也尝试使用交互式控制台:
cd c:/Projects/interner
python
import aux
无济于事(ModuleNotFoundError:没有名为“ aux”的模块)
我的系统路径:
['C:\\Tools\\Python\\python365\\python36.zip', 'C:\\Tools\\Python\\python365']
(从脚本内部和交互式控制台均可)
您能告诉我为什么我不能导入本地脚本吗?是因为我的sys.path缺少PWD吗?如果是这样,为什么会丢失它?
编辑:这样做有助于调查:
>>> import os; print(os.listdir("."))
['aux.py', 'hw.py', 'interner.py', 'my_funcs.py']
答案 0 :(得分:1)
我不知道为什么,但是您的""
变量中似乎缺少sys.path
,并且可以阻止从当前目录导入模块!
我可以以某种方式重现您的问题(eatcpu.py
在当前目录中)
$ python.exe
Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', 'C:\\Windows\\system32\\python27.zip', 'D:\\AppX64\\Python27\\DLLs', ... etc...]
>>> import eatcpu
有效。现在在另一个python会话中:
$ python.exe
Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path.remove("")
>>> import eatcpu
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named eatcpu
>>>
为您准备的快速修复程序是
import sys
sys.path.append("")
答案 1 :(得分:0)
我相信这是一个Python错误,特定于可嵌入的(没有安装程序的ZIP文件)Windows发行版。我已提交https://bugs.python.org/issue34841。
从发行版中删除python37._pth
文件(在您的情况下大概为python36._pth
)对我来说是固定的。
答案 2 :(得分:0)
您似乎正在使用CPython的可嵌入式发行版,而不是常规安装程序之一。如the documentation page所述:
嵌入式发行版是一个包含最小Python环境的ZIP文件。它旨在用作另一个应用程序的一部分,而不是由最终用户直接访问。
由于您似乎是直接访问Python而不是将其嵌入,因此您应该考虑使用常规(或Microsoft Store)安装程序(也在我上面链接的页面中进行了介绍)。
答案 3 :(得分:-1)
尝试使其明确:
from . import aux