如何导入位于pycharm项目中相同子目录中的python文件

时间:2016-03-11 21:15:37

标签: python pycharm importerror

调试和运行时,我在pycharm中输入错误。

我的项目结构已正确生根etc./HW3/.,因此HW3是根目录。

我在HW3中有一个子文件夹util和一个文件util/util.py。我在util中有另一个名为run_tests.py的文件。

run_tests.py中,我有以下导入结构,

from util.util import my_functions, etc.

这会产生输入错误from util.util import load_dataset,proportionate_sample ImportError: No module named 'util.util'; 'util' is not a package

但是,在完全相同的项目中,在名为util的另一个目录(与data相同的级别)中,我有一个文件data/data_prep.py,它还从{{1}导入函数使用类似的import语句......它运行没有任何问题。

显然,我在做作业的过程中这样做,所以请理解:这是作业范围的辅助。

当我将文件移动到另一个目录时,问题就消失了。所以我想这个问题是如何导入位于pycharm项目中同一目录下的python文件?因为如果我只是util/util.py并且提示我使用pycharm,pycharm会引发错误来自root的全名。

9 个答案:

答案 0 :(得分:39)

推荐方式:

确保将工作文件夹设置为Sources

您可以在Pycharm -> Preferences -> Project: XYZ -> Project Structure

中执行此操作

选择您的工作文件夹并将其标记为Sources。然后Pycharm将工作文件夹识别为项目的Source文件夹,您可以使用

简单地在该文件夹中添加其他文件
import filename.py

from filename.py import mudule1

=================

不推荐的方式:

Pycharm中,您只需在.文件之前添加.py,即可从相同文件夹中导入from .util import my_functions 文件。在你的情况下它将是

    import google.cloud.logging
    from google.cloud.logging.handlers import CloudLoggingHandler
    from google.cloud.logging.handlers.transports.sync import SyncTransport
    client = google.cloud.logging.Client.from_service_account_json('serviceAccountKey.json')
    handler = CloudLoggingHandler(client, name='slackbot', transport=SyncTransport)
    stackdriver = logging.getLogger('slackbot')
    stackdriver.setLevel(logging.DEBUG)
    stackdriver.addHandler(handler)

答案 1 :(得分:10)

如果您没有__init__.py创建一个并添加此行

from util.util import my_function

然后您可以轻松地在脚本中导入模块 __init__.py告诉python它应该将该文件夹视为python包,它也可以用于导入/加载模块。

在大多数情况下,__init__.py为空。

引用文档

  

需要__init__.py文件才能让Python对待   目录包含包;这是为了防止   无意中具有通用名称的目录,例如string   隐藏稍后在模块搜索路径上发生的有效模块。在   最简单的情况,__ init__.py可以只是一个空文件,但它可以   还执行包的初始化代码或设置__all__   变量,稍后描述。

答案 2 :(得分:5)

右键单击要标记为源的文件夹>将目录标记为>源根。

答案 3 :(得分:1)

注意:可能有点无关。

我遇到了同样的问题,但在运行 jupyter笔记本时,我无法在同一目录中导入模块(而不是OP所要求的子目录)(这里的目录没有'有__init__.py)。奇怪的是,我设置了python路径和解释器位置和一切。没有其他答案有帮助,但改变了python中的目录。

column2

我在select * from table where ref = 1 and column1 = column2

上使用import os os.chdir(/path/to/your/directory/)

答案 4 :(得分:1)

我与pycharm有相同的问题,但是实际的错误是我尝试导入的文件没有.py扩展名,即使我能够将其作为独立脚本运行。在资源管理器窗口中查找并确保其扩展名为.py。如果没有,请右键单击资源管理器窗口中的文件,选择“重构”,然后使用.py扩展名重命名。

答案 5 :(得分:1)

就我而言,仅当我省略扩展名时它才起作用。示例:

import filename

答案 6 :(得分:0)

在Pycharm中转到“运行-配置”,然后取消选中 '将内容根添加到Pythonpath'和 “将源根添加到Pythonpath”, 然后使用

UndefinedBehaviorSanitizer:DEADLYSIGNAL
==1074==ERROR: UndefinedBehaviorSanitizer: SEGV on unknown address 0x00000042acda (pc 0x000000422519 bp 0x7ffe697712d0 sp 0x7ffe697711f0 T1074)
==1074==The signal is caused by a WRITE memory access.
    #0 0x422518  (/root/sandbox/crack+0x422518)
    #1 0x7fb78fc7ab96  (/lib/x86_64-linux-gnu/libc.so.6+0x21b96)
    #2 0x402a79  (/root/sandbox/crack+0x402a79)

UndefinedBehaviorSanitizer can not provide additional info.
==1074==ABORTING

答案 7 :(得分:0)

对我来说,问题是源目录已正确标记,但是要导入的文件以数字值开头。重命名即可解决。

import 01_MyModuleToImport

import MyModuleToImport

答案 8 :(得分:-4)

ModuleNotFoundError:没有名为' appTwo'

的模块
from django.conf.urls import url,include
from django.contrib import admin
from appTwo import views

urlpatterns = [
    url(r'^$',views.index,name='index'),
    url(r'^admin/', admin.site.urls),
    url(r'^users/',include('appTwo.urls')),
]