我创建了一个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目录中。
问题是,首次调用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。
答案 0 :(得分:0)
使用pip install -e NAME
,会生成指向NAME目录的projectname.egg-link
,并更新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
的提示