首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyCharm是否通过文件系统中的标志将目录标记为已排除?

问PyCharm是否通过文件系统中的标志将目录标记为已排除?
EN

Stack Overflow用户
提问于 2021-10-04 19:19:43
回答 3查看 163关注 0票数 5

我想通过匹配目录中的标志排除PyCharm中排除的一些目录。

示例:我们的测试创建了一个名为.reports的目录。

我知道如何在我的PyCharm实例中排除这个目录。

但我们有许多开发人员和许多项目。我真的希望避免每个开发人员都需要将此目录标记为已排除。

有没有办法告诉PyCharm跳过这个文件?

例如,创建一个名为".pycharm-exclude“的空文件?

我正在寻找一种自动排除目录的方法,因为我们有几个开发人员,每个开发人员都有几个项目。

我创建了一个功能请求:https://youtrack.jetbrains.com/issue/PY-51093

EN

回答 3

Stack Overflow用户

发布于 2021-10-06 20:02:10

我不知道有什么类似于忽略文件的方式,因为PyCharm似乎想让你使用它的图形用户界面进行配置。但是,如果您可以灵活地使用不同的方法...

查看Settings | Editor | File Types | Ignore files and subfolders上的默认文件/目录忽略列表

您可以将.reports ->重命名为.reports~、.reports.pyc、.reports.rbc、.svn等,PyCharm将忽略它。

默认情况下,PyCharm会忽略许多模式/名称,因为它们是常见的非项目名称。如果您命名的目录与这些模式/名称之一相匹配,那么您可以欺骗PyCharm忽略该目录。默认情况下,大约有20个模式/名称被忽略(在上面的路径中找到),所以我会选择在团队中造成最小混淆的模式/名称/防止一些我不知道的问题。

如果您想要一个更合理的名称,您可以将.report;添加到此列表中,作为此列表在所有项目中持续存在,但每个开发人员都需要更新它一次。

为了方便看到这一点的其他人,在Settings | Project: ... | Project Structure | Exclude files中还有更常见的排除列表,它缺省为空,并且不会在项目中持续存在

票数 4
EN

Stack Overflow用户

发布于 2021-10-04 19:45:58

我不知道有哪一个文件能像你描述的那样工作。但是,您可以查看您的想法的项目文件.idea/<project>.iml (其中<project>是您的项目名称)。假设您的项目名为your-app,则可以在.idea/your-app.iml下找到它。它应该描述排除的文件夹,如下所示:

代码语言:javascript
复制
  <component name="NewModuleRootManager">
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/.reports" />
    </content>
  </component>

您可以创建存储库的全新克隆,在PyCharm中打开它,排除文件夹并提交your-app.iml文件。

它并不完美,因为当你的同事签出它时,它可能会覆盖他们的设置,但它基本上为他们提供了一个排除该文件夹的模板文件。然后,您可能应该将该文件添加到.gitignore文件中,这样以后就不会有人覆盖共享文件:

代码语言:javascript
复制
# .gitignore
# exclude .idea folder
.idea/

# or just the file
.idea/your-app.iml

如果git已经忽略了该文件,则可能需要使用force标志添加该文件:

代码语言:javascript
复制
git add -f .idea/your-app.iml

在这种情况下,您以后可能不必将其添加到任何.gitignore文件中。

注意:我还没有测试过这个。我预计它可能会引入冲突,或者覆盖本地存储库中已经有your-app.iml文件的开发人员。它可能在新项目中效果最好。

票数 2
EN

Stack Overflow用户

发布于 2021-10-12 03:17:56

您可以使用如下代码编辑项目.idea/<project-name>.iml:

用于编辑IML文件的代码

代码语言:javascript
复制
from pathlib import Path
import xml.etree.ElementTree as et

EXCLUDE_PREFIX = 'file://$MODULE_DIR$'
idea_dir = Path('.idea')  # pycharm stores the project files in .idea
project_file = next(idea_dir.glob('*.iml'), None) if idea_dir.exists() else None

if project_file is None:
    # we expect to be in the project root directory
    exit(1)

project_file = project_file.resolve()
tree = et.parse(project_file)
module_dir = tree.find(".//content[@url='file://$MODULE_DIR$']")

if module_dir is None:
    # add a node for the NewModuleRootManager
    root_manager = tree.find(".//component[@name='NewModuleRootManager']")
    module_dir = et.SubElement(root_manager, 'content', url='file://$MODULE_DIR$')

# find which exclude directories we need to add
existing_excludes = {Path(f.attrib['url'].replace(EXCLUDE_PREFIX, '.'))
                     for f in module_dir.findall("excludeFolder")}
desired_excludes = {f.parent for f in idea_dir.parent.rglob('.pycharm-exclude')}
new_excludes = sorted(f'{EXCLUDE_PREFIX}/{f}' for f in desired_excludes - existing_excludes)

# add the needed exclude directories and save the file
if new_excludes:
    for exclude in new_excludes:
        et.SubElement(module_dir, 'excludeFolder', url=exclude)
    et.indent(tree)  # this expects python 3.9
    tree.write(str(project_file), xml_declaration=True, encoding='UTF-8')

这是怎么回事?

项目的.iml文件是xml。我们可以使用etree读入XML,然后对其进行相应的编辑。直接查找我们的标记文件,然后根据需要将excludeFolder节点添加到xml。.iml文件xml的相关部分如下所示:

代码语言:javascript
复制
<?xml version="1.0" encoding="UTF-8"?>
<module type="PYTHON_MODULE" version="4">
  <component name="NewModuleRootManager">
    <content url="file://$MODULE_DIR$">
      <excludeFolder url="file://$MODULE_DIR$/exclued_dir" />
    </content>
  </component>
</module>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69441295

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档