控制 PyCharm 中的 PYTHONPATH 排序以首先搜索源文件夹
Controlling PYTHONPATH ordering in PyCharm to make the Source Folders are searched first
我创建了一个projectname包,然后用PyCharm调试里面的代码。
我还使用 venv 为包设置 Python 环境。我遵循标准包结构如下。
.
├── NAME
│ ├── __init__.py
│ ├── arith.py
│ └── arith.py
├── bin
│ └── app.py
├── build
│ ├── bdist.macosx-10.11-intel
│ └── lib
│ └── NAME
│ ├── __init__.py
│ └── arith.py
├── dist
│ └── projectname-0.1-py2.7.egg
├── docs
├── requirements.txt
├── setup.py
└── tests
├── __init__.py
└── arith_tests.py
然后,我将项目导入PyCharm。
在 Project:sekelton 中,我将 NAME/tests 标记为源文件夹,将 build/dist 标记为排除文件夹。
我还 运行 python setup.py install
构建生成的 egg 文件并将其安装到 venv 的站点包目录中。
问题是安装在 site-package 中的 egg 文件首先被调用,因为 PYTHONPATH 显示来自 import sys; print sys.path
:
['/python/structure/projects/skeleton/bin',
'python/structure/projects/venv/lib/python2.7/site-packages/projectname-0.1-py2.7.egg', <== egg file is searched first
'python/structure/projects/skeleton/NAME', <==
这很烦人,因为我无法使用 PyCharm 调试代码,当我修改代码时,我不得不再次 运行 python setup.py install
来更新 egg 文件.我可以通过从 Project Interpreter 设置中删除 egg 文件来避免这个问题,但我认为更改顺序应该是更好的选择。
如何更改 PyCharm 中的 PYTHONPATH 顺序,以便首先搜索本地源文件夹?
编辑
当我尝试从 Project Interpreter 设置中删除包时,PyCharm 显示一条错误消息,但它是误报,因为 PyCharm 成功删除了 egg 文件,并更新了 easy- install.pth.
使用pip install -e NAME
,将使projectname.egg-link
指向NAME目录,并更新easy-install.pth
。我认为这是比 python setup.py
更好的方法,并且解决了 PYTHONPATH 问题。
skeleton> pip install -e .
Obtaining file:///python/structure/projects/skeleton
Requirement already satisfied (use --upgrade to upgrade): nose in /python/structure/projects/venv/lib/python2.7/site-packages (from projectname==0.1)
Installing collected packages: projectname
Running setup.py develop for projectname
Successfully installed projectname
使用这种方法,鸡蛋不在 PYTHONPATH 中。
['/python/structure/projects/skeleton/bin',
'/python/structure/projects/skeleton/NAME',
更好的是,我们可以使用 pip uninstall projectname
删除软件包。
pip uninstall projectname
Uninstalling projectname-0.1:
python/structure/projects/venv/lib/python2.7/site-packages/projectname.egg-link
Proceed (y/n)? y
Successfully uninstalled projectname-0.1
我从 Installing Python packages from local file system folder with pip
那里得到了提示
我创建了一个projectname包,然后用PyCharm调试里面的代码。 我还使用 venv 为包设置 Python 环境。我遵循标准包结构如下。
.
├── NAME
│ ├── __init__.py
│ ├── arith.py
│ └── arith.py
├── bin
│ └── app.py
├── build
│ ├── bdist.macosx-10.11-intel
│ └── lib
│ └── NAME
│ ├── __init__.py
│ └── arith.py
├── dist
│ └── projectname-0.1-py2.7.egg
├── docs
├── requirements.txt
├── setup.py
└── tests
├── __init__.py
└── arith_tests.py
然后,我将项目导入PyCharm。 在 Project:sekelton 中,我将 NAME/tests 标记为源文件夹,将 build/dist 标记为排除文件夹。
我还 运行 python setup.py install
构建生成的 egg 文件并将其安装到 venv 的站点包目录中。
问题是安装在 site-package 中的 egg 文件首先被调用,因为 PYTHONPATH 显示来自 import sys; print sys.path
:
['/python/structure/projects/skeleton/bin',
'python/structure/projects/venv/lib/python2.7/site-packages/projectname-0.1-py2.7.egg', <== egg file is searched first
'python/structure/projects/skeleton/NAME', <==
这很烦人,因为我无法使用 PyCharm 调试代码,当我修改代码时,我不得不再次 运行 python setup.py install
来更新 egg 文件.我可以通过从 Project Interpreter 设置中删除 egg 文件来避免这个问题,但我认为更改顺序应该是更好的选择。
如何更改 PyCharm 中的 PYTHONPATH 顺序,以便首先搜索本地源文件夹?
编辑
当我尝试从 Project Interpreter 设置中删除包时,PyCharm 显示一条错误消息,但它是误报,因为 PyCharm 成功删除了 egg 文件,并更新了 easy- install.pth.
使用pip install -e NAME
,将使projectname.egg-link
指向NAME目录,并更新easy-install.pth
。我认为这是比 python setup.py
更好的方法,并且解决了 PYTHONPATH 问题。
skeleton> pip install -e .
Obtaining file:///python/structure/projects/skeleton
Requirement already satisfied (use --upgrade to upgrade): nose in /python/structure/projects/venv/lib/python2.7/site-packages (from projectname==0.1)
Installing collected packages: projectname
Running setup.py develop for projectname
Successfully installed projectname
使用这种方法,鸡蛋不在 PYTHONPATH 中。
['/python/structure/projects/skeleton/bin',
'/python/structure/projects/skeleton/NAME',
更好的是,我们可以使用 pip uninstall projectname
删除软件包。
pip uninstall projectname
Uninstalling projectname-0.1:
python/structure/projects/venv/lib/python2.7/site-packages/projectname.egg-link
Proceed (y/n)? y
Successfully uninstalled projectname-0.1
我从 Installing Python packages from local file system folder with pip
那里得到了提示