1. 请教python相对路径问题,
改为
f=open(r'file/test.txt','wb')
要确保你的路径下有file文件夹的
2. python相对导入
除了让包内导入更加显式,这个功能的一部分设计初衷是,为了帮助脚本解决同名文件出现在模块搜索路径上多个不同位置时的二义性。考虑包目录,这定义了一个名为mypkg 的包,其中含有名为mypkg.main和mypkg.string 的模块。现在,假设模块main试图导入名为string的模块。在 Python 2.X和更早版本中,Python会先寻找mypkg目录以执行相对导入。这会找到并导入位于该处的string.py文件,将其赋值给mypkg.main模块命名空间内的名称string。不过,这一导入的本意可能是要导入Python标准库的string模块。可惜的是,在这些Python版本中,无法直接忽略mypkg.string 去寻找位于模块搜索路径更右侧的标准库中的string模块。此外,我们无法使用完整包导入路径来解决这个问题,因为我们无法依赖在每台机器上的标准链接库路径。换句话说,包中的简单导入可能具有二义性而且容易出错。在包内,我们无法确定imports pam语句指的是包内的模块还是包外的模块。一种可能的后果是,一个局部的模块或包会在不经意间隐藏了sys.path 上的另一个模块。在实践中,Python使用者可以避免为他们自己的模块重复使用标准库模块的名称(如果需要标准string库,就不要把新的模块命名为string)。但是,一个包还是有可能意外地隐藏标准库模块。再者,Python 以后可能新增标准库模块,而其名称可能刚好就和自己的一个模块同名。而依赖于没有点号开头相对导入的程序代码同样也不容易理解,因为读者可能对希望使用哪个模块而感到困惑。所以我们最好能在代码中显式地指出导入的解析过程。
3. 如何解决python不能导入同目录py文件
解决python不能导入同目录py文件的方法:
先查看需要导入的py文件名是否含有空格以及中文字符,如果有就删掉空格换成英文的字符
然后用“import 文件名”的方式导入py文件就可以了
更多Python知识,请关注:Python自学网!!
4. Python导入包错误怎么办
Python导入包时一般会出现两个错误:
1、系统出现SyntaxError: invalid syntax的错误;
2、系统提示SyntaxError: invalid syntax错误。
5. python 相对路径问题,新手。谢谢。
使用os模块来获取当前文件的绝对路径和拼接路径。
importos
BASE_DIR=os.path.dirname(__file__)#获取当前文件夹的绝对路径
printBASE_DIR
file_path=os.path.join(BASE_DIR,'Test_Data')#获取当前文件夹内的Test_Data文件
Test_Data=open(file_path,"r")#读取文件
forlineinTest_Data:
printline
Test_Data.close()#关闭文件
6. mac打包python + pyinstaller,解决相对路径问题
命令: pip pyinstaller 命令: pyinstaller --windowed --onefile --clean --noconfirm target.py 注:target.py 为目标脚本文件 问题: 如果,打包使用绝对路径会出现每更换一台电脑,而且脚本中需要调用资源文 件,就要重新进行配置路径; 解决方法:获取脚本运行的当前路径,在用于其他资源调取的路径 命令:import os, sys path = os.path.dirname(os.path.dirname(os.path.realpath(sys.executable))) path 获取的是脚本运行当前路径的上一级路径; 后面调用文件路径根据文件夹和脚本的层级关系,随意更换path7. 请问为什么python3.7.3import导入模块不成功
1、主要你是要当前使用的环境中是否已经安装了对应的模块。
2、检查当前使用的环境是否为虚拟环境的,如果为虚拟环境,则之前在python路径下安装的模块应该是不能使用的,所有还需要重新在虚拟环境中安装对应的模块。
3、在你展现的程序中呈现的是语法错误,然而并非是模块导入错误,所以好好检查你的程序出错的地方。
8. Python的错误导入已经安装模块问题,怎么解决
当遇到无法导入某个python模块时,可能会是没有安装某个模块,也有可能是某模块在加载过程中失败,也有可能是陷入了循环导入的问题。本文详细解释了这个问题。
1. 模块未安装或者路径不对
ImportError: No mule named myMole
有两种可能,一是该模块没有安装,一般可以用
pip install %mole_name%
来解决。注意有时候模块安装包名并不等于要导入的模块名。这种情况下可以通过pip search | list命令来尝试找到正确的包。
另一种情况就是包虽然安装了,但当前运行的程序加载的路径有错。python运行时将从以下位置尝试加载python moles:
* 当前目录
* 环境变量$PYTHONPATH所指示的值,这是一个由“:”分隔的字符串,各个子字符串都是文件系统的一个路径。
* 标准库目录,如dist-site-packages下的模块。
* 在.pth文件中指定的路径,如果存在.pth文件的话。
可以使用以下方式来查看python运行时的包含路径:
?
12
import sysprint(sys.path)
在运行出错的脚本装头部加上这一段代码,然后在控制台中查看打印出来的python类库路径,检查安装包是否已包含在上述路径中。
***可以通过下面的方式将未包含在路径中的模块临时包含进来:***
sys.path.append("path/to/mole")
另外,还可以在shell窗口中查看当前的python包含路径:
echo $PYTHONPATH
2. 无法导入已存在的模块
如果要导入的模块包含了native代码,并且native代码加载(初始化)失败时,就会导致这种错误。使用ssl,
gevent等涉及native的模块时,如果对应的native程序并未安装,则会出现这样的错误。
另一种错误情况是,使用相对路径导入时,父模块还未导入成功。见下面的代码:
?
12345
main.pymypackage/ __init__.pymymole.pymyothermole.py
mymole.py如下所示:
?
123456789101112
#!/usr/bin/env python3 # Exported functiondef as_int(a): return int(a) # Test function for mole def _test(): assert as_int('1') == 1 if __name__ == '__main__': _test()
以及myothermole代码如下所示:
?
1234567891011121314
#!/usr/bin/env python3 from .mymole import as_int # Exported functiondef add(a, b): return as_int(a) + as_int(b) # Test function for mole def _test(): assert add('1', '1') == 2 if __name__ == '__main__': _test()
如果执行mypackage/myothermole,则会报以下错误:
Traceback (most recent call last):
File "myothermole.py", line 3, in
<mole>
from .mymole import as_int
SystemError: Parent mole
'' not loaded, cannot perform relative import
[这篇文章](#Relative imports in
Python 3)给出了更详细的解答。
3. 循环导入
这种错误称之为"circular (or cyclic) imports"。是python独有的一种导入错误,在象java这样的语言中就不存在。
假设有如下两个文件,a.py和b.py:
?
1234567
#a.pyprint "a in"import sysprint "b imported: %s" % ("b" in sys.moles, )import bprint "a out"print b.x
以及:
?
12345
#b.pyprint "b in"import aprint "b out"x = 3
执行python a.py,将得到以下结果:
?
123456789101112131415
$ python a.pya in b imported: Falseb ina inb imported: Truea outTraceback (most recent call last): File "a.py", line 4, in <mole> import b File "/home/shlomme/tmp/x/b.py", line 2, in <mole> import aFile "/home/shlomme/tmp/x/a.py", line 7, in <mole> print b.xAttributeError: 'mole' object has no attribute 'x'
出现这种情况的原因是产生了循环导入。循环导入,以及在导入过程中python进行了加锁操作,最终导致在模块b未导入完成时就引用了其中的名字。
判断导入错误是否是因为循环导入引起的,主要看堆栈中是否出现两次重复的导入。比如上述堆栈中a.py出现两次,因此可以判断是这个文件引起的循环导入。
要解决这个问题,可以把模块看成一种资源,对所有要引入的模块进行编号,再按静态资源排序法顺次导入,就可以避免循环导入。