是否有强迫PyCharm始终使用绝对导入的方法?

时间:2018-10-23 12:51:05

标签: python pycharm

我使用的是PyCharm,通常依靠alt + enter快捷方式来自动导入类和函数。

但是,它不使用绝对导入路径。它在本地运行良好,但是当我推送到GitHub时,我的测试在TravisCI中失败了。

有人知道强制PyCharm以绝对路径导入的方法吗?

如果我使用类似drone_squadron.api.drone_api的东西,我需要像这样api.drone_api进行导入,远程测试找不到导入。这适用于所有本地进口。

我希望所有时间始终都是绝对进口。相对进口使我在打包项目时遇到了问题。我认为始终使用绝对导入会更容易。

Git回购

https://github.com/sarcoma/drone_squadron_api_prototype

树结构

.
├── coverage.xml
├── LICENSE.md
├── pytest.ini
├── README.md
├── requirements.txt
├── drone_squadron
│   ├── app.py
│   ├── endpoints.http
│   ├── flask.cfg
│   ├── __init__.py
│   ├── load_fixtures.py
│   ├── main.py
│   ├── router.py
│   ├── schema.py
│   ├── test_flask.cfg
│   ├── api
│   │   ├── base_api.py
│   │   ├── drone_api.py
│   │   ├── gimbal_api.py
│   │   ├── __init__.py
│   │   ├── price_api.py
│   │   ├── round_type_api.py
│   │   ├── scanner_api.py
│   │   ├── squadron_api.py
│   │   ├── steering_api.py
│   │   ├── thruster_api.py
│   │   ├── user_api.py
│   │   └── weapon_api.py
│   ├── authentication
│   │   ├── __init__.py
│   │   └── login.py
│   ├── crud
│   │   ├── base_crud.py
│   │   ├── drone_crud.py
│   │   ├── gimbal_crud.py
│   │   ├── __init__.py
│   │   ├── item_crud.py
│   │   ├── price_crud.py
│   │   ├── round_type_crud.py
│   │   ├── scanner_crud.py
│   │   ├── squadron_crud.py
│   │   ├── status_crud.py
│   │   ├── steering_crud.py
│   │   ├── thruster_crud.py
│   │   ├── user_crud.py
│   │   └── weapon_crud.py
│   ├── database
│   │   ├── database.py
│   │   ├── drones.db
│   │   ├── drones_test.db
│   │   └── __init__.py
│   ├── enums
│   │   ├── __init__.py
│   │   ├── round_type.py
│   │   └── status.py
│   ├── error
│   │   ├── error.py
│   │   └── __init__.py
│   ├── fixtures
│   │   ├── gimbal_fixtures.py
│   │   ├── __init__.py
│   │   ├── round_type_fixtures.py
│   │   ├── scanner_fixtures.py
│   │   ├── status_fixtures.py
│   │   ├── steering_fixtures.py
│   │   ├── thruster_fixtures.py
│   │   ├── user_fixtures.py
│   │   └── weapon_fixtures.py
│   ├── model
│   │   ├── base_model.py
│   │   ├── drone_model.py
│   │   ├── __init__.py
│   │   └── squadron_model.py
│   ├── request
│   │   ├── __init__.py
│   │   └── json_request_handler.py
│   ├── response
│   │   ├── __init__.py
│   │   └── json_response.py
│   ├── service
│   │   └── calculate_cost.py
│   ├── transformer
│   │   ├── __init__.py
│   │   ├── json_transformer.py
│   │   └── transformer.py
│   └── validation
│       ├── abstract
│       │   ├── __init__.py
│       │   └── validation_abstract.py
│       ├── drone_validation.py
│       ├── field.py
│       ├── __init__.py
│       ├── validation_link.py
│       └── validations.py
└── tests
    ├── drones_test.db
    ├── __init__.py
    ├── test_api
    │   ├── conftest.py
    │   ├── __init__.py
    │   ├── test_auth.py
    │   ├── test_drone.py
    │   ├── test_gimbal.py
    │   ├── test_price_list.py
    │   ├── test_round_type.py
    │   ├── test_scanner.py
    │   ├── test_squadron.py
    │   ├── test_steering.py
    │   ├── test_thruster.py
    │   └── test_weapon.py
    └── test_crud
        ├── conftest.py
        ├── __init__.py
        ├── test_drone_crud.py
        ├── test_gimbal_crud.py
        ├── test_scanner_crud.py
        ├── test_squadron_crud.py
        ├── test_status_crud.py
        ├── test_steering_crud.py
        ├── test_thruster_crud.py
        ├── test_user_crud.py
        └── test_weapon_crud.py

1 个答案:

答案 0 :(得分:4)

在Python中,相对或绝对导入允许您从项目的根目录中导入(绝对导入)

import drone_squadron.api.drone_api

或从当前的python包(相对导入)中获取。

import ..api.drone

在您的情况下,问题不是相对/绝对混淆,PyCharm始终添加绝对导入。

问题在于PyCharm可能会将项目中的文件夹drone_squadron视为“根目录”。错了!根目录是与整个git项目相对应的顶级文件夹(该文件夹包含LICENSE.md,README.md等)

在PyCharm中,右键单击文件夹drone_squadron,然后打开子菜单Mark directory as(在底部),然后选择Unmark as Source Root

enter image description here

执行此操作后,将以您想要的方式添加您的导入。