@Channelchan
2019-03-14T10:35:49.000000Z
字数 3829
阅读 1245
python基础
在python中使用import
导入模块时解释器会采用以下规则查找模块文件:
sys.path
(list)中的路径为根目录。import
输入的文件名在每一个根目录中查找指定的文件。sys.path
路径下都找不到对应的文件则抛出ImportError
sys.path
中主要包含下列路径: pip install
或conda install
安装的包都在这些目录中)。PYTHONPATH
指定的路径。
import sys
print(sys.path)
['D:\ADX-StrategyPool\test', 'D:\ADX-StrategyPool', 'D:\vnpy_fxdayu', 'C:\ProgramData\Anaconda3\envs\vnpy\python36.zip', 'C:\ProgramData\Anaconda3\envs\vnpy\DLLs', 'C:\ProgramData\Anaconda3\envs\vnpy\lib', 'C:\ProgramData\Anaconda3\envs\vnpy', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Sphinx-1.5.6-py3.6.egg', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32\lib', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Pythonwin', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\setuptools-27.2.0-py3.6.egg']
sys.path
在生成时会将环境变量PYTHONPATH
中指定的路径添加进去,因此可以通过修改环境变量的方式增加导入模块的引用地址。
在外部路径"E:\oes"创建文件iptest.py
print("---------------iptest---------------")
尝试直接导入
import sys
print(sys.path)
import iptest
['D:\ADX-StrategyPool\test', 'D:\ADX-StrategyPool', 'D:\vnpy_fxdayu', 'C:\ProgramData\Anaconda3\envs\vnpy\python36.zip', 'C:\ProgramData\Anaconda3\envs\vnpy\DLLs', 'C:\ProgramData\Anaconda3\envs\vnpy\lib', 'C:\ProgramData\Anaconda3\envs\vnpy', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Sphinx-1.5.6-py3.6.egg', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32\lib', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Pythonwin', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\setuptools-27.2.0-py3.6.egg']
Traceback (most recent call last):
File "path.py", line 4, in
import iptest
ModuleNotFoundError: No module named 'iptest'
失败!!!
手动添加路径后导入
import sys
sys.path.append(r"E:\oes")
print(sys.path)
import iptest
['D:\ADX-StrategyPool\test', 'D:\ADX-StrategyPool', 'D:\vnpy_fxdayu', 'C:\ProgramData\Anaconda3\envs\vnpy\python36.zip', 'C:\ProgramData\Anaconda3\envs\vnpy\DLLs', 'C:\ProgramData\Anaconda3\envs\vnpy\lib', 'C:\ProgramData\Anaconda3\envs\vnpy', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Sphinx-1.5.6-py3.6.egg', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32\lib', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Pythonwin', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\setuptools-27.2.0-py3.6.egg', 'E:\oes'] #<---这里多了一个路径。
---------------iptest---------------
成功
通过修改环境变量导入
windows cmd
:
set PYTHONPATH=E:/oes
linux terminal
/ git bash
/ macos termminal
:
export PYTHONPATH=/e/oes
文件path.py
import sys
print(sys.path)
import iptest
在修改了环境变量的终端运行脚本:
['D:\ADX-StrategyPool\test', 'E:\oes', 'C:\ProgramData\Anaconda3\envs\vnpy\python36.zip', 'C:\ProgramData\Anaconda3\envs\vnpy\DLLs', 'C:\ProgramData\Anaconda3\envs\vnpy\lib', 'C:\ProgramData\Anaconda3\envs\vnpy', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Sphinx-1.5.6-py3.6.egg', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\win32\lib', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\Pythonwin', 'C:\ProgramData\Anaconda3\envs\vnpy\lib\site-packages\setuptools-27.2.0-py3.6.egg']
---------------iptest---------------
成功
vscode可以自己指定在集成环境中使用的终端,默认为系统终端,也可以通过配置修改为其他终端。
cmd
修改为git bash
生成的终端会包含系统及当前用户环境变量,可以在vscode用户配置或项目配置中增加设置为生成的终端添加额外的环境变量。
sample,windows下添加PYTHONPATH环境变量,在该项目下的所有终端会带有该环境变量,在这些终端下运行python会在sys.path中包含这些路径,因此可以从这些路径导入包 !
https://docs.python.org/3/using/cmdline.html#environment-variables