用 VSCode 开发 Scrapy 工程的包路径问题 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
tomleung1996
V2EX    Python

用 VSCode 开发 Scrapy 工程的包路径问题

  •  
  •   tomleung1996 2019-02-08 20:16:44 +08:00 7542 次点击
    这是一个创建于 2441 天前的主题,其中的信息可能已经有所发展或是发生改变。

    用 Scrapy 模板新建的工程根目录放的是 Scrapy 的.cfg文件,项目代码在根目录下的另一个目录放置

    用 PyCharm 开发的时候可以将那一个目录设置成Sources Root,导入包的时候就可以不用写该目录的名字了。但是 VSCode 好像没法这样设置?

    比如我的目录结构是这样的:

    我在main.py里面用from gui.main_gui import *来导入 gui 包的一些东西,

    会提示**Unable to import 'gui.main_gui'pylint(import-error)**

    但是在 PyCharm 里面是不会显示错误的,而且在 VSCode 中直接执行该文件也不会出错,如果改成从wos_crawler目录开始写的路径的话,反而会出错。

    那么问题来了,VSCode 能不能设置类似 Sources Root 的东西呢?

    15 条回复    2019-11-19 18:13:53 +08:00
    hsfzxjy
        1
    hsfzxjy  
       2019-02-08 21:16:24 +08:00 via Android
    tomleung1996
        2
    tomleung1996  
    OP
       2019-02-08 21:46:45 +08:00
    @hsfzxjy 也不行,应该不是这个原因。
    Trim21
        3
    Trim21  
       2019-02-08 21:57:43 +08:00
    设置一个 PYTHONPATH 的环境变量
    zzj0311
        4
    zzj0311  
       2019-02-09 01:42:10 +08:00 via Android
    vscode 你打开的这个文件夹就是 root 啊
    zzj0311
        5
    zzj0311  
       2019-02-09 01:42:43 +08:00 via Android
    @zzj0311 所以你少了一级
    tomleung1996
        6
    tomleung1996  
    OP
       2019-02-09 09:15:08 +08:00
    @Trim21 是在系统环境变量修改吗?能不能通过在工程中的配置来修改?
    tomleung1996
        7
    tomleung1996  
    OP
       2019-02-09 09:16:33 +08:00
    @zzj0311 是多了一层,vscode 和 pycharm 都默认从打开文件夹的根目录开始索引,根目录的名字可以不写。但是在 pycharm 里,我把内层的一个文件夹设置为根目录了,vscode 不知道怎么操作
    xiaoxinxiaobai
        8
    xiaoxinxiaobai  
       2019-02-09 09:40:15 +08:00 via Android
    同一楼,使 gui 成为一个 module,同时看看 main_gui.py 里面是不是有啥问题,比如一些 module 是不是有,是不是可以 import,这和你用什么编辑器,开发环境没多大关系吧,把 python 的 import 搞搞清楚,写出的东西总要脱离你的编辑器去运行的
    tomleung1996
        9
    tomleung1996  
    OP
       2019-02-09 10:09:45 +08:00
    @xiaoxinxiaobai 怎么说呢,现在的情况是能脱离编辑器运行的,但是编辑器开发的时候反而不知道从哪个目录开始去找包。我的根目录是 wos_crawler,里面还有一个放程序的 wos_crawler 文件夹。我编辑器打开的是最外层的文件夹作为工程根目录,因为除了程序之外还放了些配置文件。如果不做任何配置的话,import 会从根目录开始搜索,自然搜不到 gui 包了,要用 wos_crawler.gui 才行。但是这样一改的话,是不能脱离编辑器运行的,所以我用 PyCharm 的时候把内层的 wos_crawler 文件夹作为搜索起点( Sources Root ),不知道 VSCode 需要怎么配置。

    我可能说的有点乱,谢谢你的回复!
    tomleung1996
        10
    tomleung1996  
    OP
       2019-02-09 10:11:33 +08:00
    @xiaoxinxiaobai 不只是一个文件,全部文件凡是用了我自己写的包的,只要前面没加上`wos_crawler.`,就会有这个错误提示。但是实际运行是没问题的。
    inhzus
        11
    inhzus  
       2019-02-09 11:05:10 +08:00 via Android
    Google 关键词:vscode python add path

    https://stackoverflow.com/questions/41471578/visual-studio-code-how-to-add-multiple-paths-to-python-path

    在 launch.json 中添加 env.pythonPath
    或者在根目录创建 .env 文件,设置 pythonpath

    具体见链接
    hujianxin
        12
    hujianxin  
       2019-02-09 13:59:23 +08:00
    “在 main.py 里面用 from gui.main_gui import *来导入 gui 包的一些东西”是不对的。上面的朋友已经说了,gui 目录下面必须有__init__.py

    但是你说现在是可以脱离编辑器运行的,原因应该是:pycharm 已经帮你编译出了__pycache__这个目录,你把这个目录删除,在命令行中应该就无法运行了
    tomleung1996
        13
    tomleung1996  
    OP
       2019-02-09 15:35:38 +08:00
    @inhzus 感谢,不过这个回答的方法我之前已经试过了,我在 env 添加了 wos_crawler 路径,无论是绝对路径还是相对路径,编辑器都会在编辑时有红线。会不会是语法检查插件的问题?我就安装了个 Python 插件,用的好像是 Microsoft Python language server
    donglipeng
        14
    donglipeng  
       2019-02-09 20:26:01 +08:00
    我最近也遇到了这个问题,你说的报错问题参考这个链接 https://github.com/Microsoft/vscode-python/issues/179
    guowei121493
        15
    guowei121493  
       2019-11-19 18:13:53 +08:00
    搞了半天终于搞定了,比较坑爹的是 vscode 有两个 PYTHONPATH 的设置
    1. 第一个是编辑器的位置也就是 python.exe 的位置。这个在 extension 的设置里可以找到。
    2. 第二个是在项目目录下建立.env
    里面写上 PYTHOnPATH= ${workspaceFolder}/;${PYTHONPATH};
    注意,根据你的系统来确定是;还是:作为分隔符,:是 linux 或 mac,;是 windows。
    还有这个配置比较神奇,不要带引号

    来个原文 https://code.visualstudio.com/docs/python/environments#_use-of-the-pythonpath-variable

    另外看文章里说还有一种方式是可以配这以下几个配置,没有试。
    The best way to specify a value for the PYTHONPATH variable is to use the terminal.integrated.env.linux, terminal.integrated.env.osx, or terminal.integrated.env.windows
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3211 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 11:23 PVG 19:23 LAX 04:23 JFK 07:23
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86