Python从更高/其他文件夹导入函数

Python从更高/其他文件夹导入函数,python,importerror,python-import,Python,Importerror,Python Import,我对Python(3.3.2)是相当陌生的,我对使用Python的经验很少 来自。。。。导入… 除了使用时间、乌龟和数学之外。我正在处理几个项目Euler问题,这些问题需要一个函数来使用我的简单isPrime(n)函数确定一个数的素性。isPrime(n)函数是名为isPrime.py的文件中唯一的函数 对于每个问题,我都有一个单独的文件夹。我试图保持代码的简洁,但我发现直接从isPrime.py复制我的isPrime(n)函数并将其粘贴到每个问题文件夹中的每个新文件中很不方便。我有一些关于改进

我对Python(3.3.2)是相当陌生的,我对使用Python的经验很少

来自。。。。导入…

除了使用时间、乌龟和数学之外。我正在处理几个项目Euler问题,这些问题需要一个函数来使用我的简单isPrime(n)函数确定一个数的素性。isPrime(n)函数是名为isPrime.py的文件中唯一的函数

对于每个问题,我都有一个单独的文件夹。我试图保持代码的简洁,但我发现直接从isPrime.py复制我的isPrime(n)函数并将其粘贴到每个问题文件夹中的每个新文件中很不方便。我有一些关于改进iPrime(n)功能的想法,我不想在做一些修改时打开几个问题文件夹来更改每个文件中的行

因此,我认为在每个问题文件的顶部写下以下行是可行的:

从isPrime.py导入isPrime
甚至从isPrime导入isPrime

但是,我在两方面都遇到了以下错误:

ImportError:没有名为'isPrime'的模块

以下是我的文件夹层次结构的基本描述:

  • ProjectEuler文件夹
    • 素性函数文件夹
      • isPrime.py[包含函数isPrime(n)]
      • 另一个文件.py
      • yetAnotherFile.py
    • 问题X文件夹
      • 问题x.py
      • 什么,派克
      • 有些事
    • 问题Y文件夹
      • problemY.py
      • 什么东西
      • 一些2.py的东西
    • 问题Z文件夹
      • 问题z.py
      • 有些事
      • 一些3.py的东西
  • 我的问题是:

    我需要在文件
    problemX.py
    problemY.py
    problemZ.py
    的开头几行键入什么才能使用文件夹
    primarity Functions
    中文件
    isPrime.py
    中的函数
    isPrime(n)


    我在stackoverflow这里进行了详细的搜索,我发现许多问题都与Python有关,并且很难导入文件/模块。然而,我不理解什么是系统路径,或者什么是相对导入,我也不知道Python文档告诉我的是什么请不要将此问题标记为许多Python/导入问题的重复。我想要的只是一个简单的1-3行代码,放在我的文件顶部,这样我就可以从其他文件夹导入我的函数,而不必每次尝试新问题时都复制和粘贴我的函数。我将非常感激最简单的回答。谢谢大家!

    由于您希望将要导入的模块保存在不同的目录中,您可以通过将这些目录添加到sys.path中来告诉python在哪里可以找到它们:

    from sys import path
    path.append('fully specified path name of directory with module you want to import')
    from mymodule import myfunction
    
    如果isPrime.py与导入它的程序位于同一文件夹中,则不需要执行此操作,但有时这并不实际


    <> p>这不是一个最佳的模块,它与它的一个函数具有相同的名称,所以我会考虑改变它。

    因为要保持你在不同目录中导入的模块,你可以通过将这些目录添加到sys。路径:

    来告诉Python在哪里找到它们。
    from sys import path
    path.append('fully specified path name of directory with module you want to import')
    from mymodule import myfunction
    
    如果isPrime.py与导入它的程序位于同一文件夹中,则不需要执行此操作,但有时这并不实际


    <> P>对于同一个函数的名称,它不是最优的,但是,我会考虑改变它。

    我也有同样的问题,即,我有一些实用的模块,可以用来解决多个项目Euler问题,每个项目Euler问题都有自己的目录。 最初,我将实用工具文件夹放入

    sys.path
    中,如下所示:

    它感觉很脏,但它起作用了(注意:我甚至在这里使用了相对路径!)

    或者,您可以在与
    isPrime.py
    相同的目录中创建:

    from distutils.core import setup
    
    NAME = 'isPrime'
    setup(name=NAME, version='0.0.1', py_modules=[NAME])
    
    并安装您的实用程序模块:

    $ python setup.py install
    
    之后,您可以在任何脚本中使用它:

    from isPrime import isPrime
    
    如果您想使用多个实用模块;您可以将它们放入
    project\u euler\u utils
    目录中,并将其作为Python包安装。将
    setup.py
    沿
    project\u euler\u utils
    目录放置:

    from distutils.core import setup
    
    NAME = 'project_euler_utils'
    setup(name=NAME, version='0.0.1', packages=[NAME])
    
    运行
    pip install project\u euler\u utils来安装它。之后;您可以从任何脚本/模块使用它:

    from project_euler_utils.isprime import isprime
    
    注意:我使用了小写名称作为(您需要重命名模块和其中的函数)


    我试着使用我能想到的最完整的路径
    “C:\Users\Owner\Documents\Primality Functions Folder”
    ,它给了我一个
    语法错误:(unicode错误)“UnicodeScape”编解码器无法解码位置2-3的字节:截断的\uxxxxxxx转义。


    对Windows路径使用原始字符串文字
    r'C:\Users\Owner…'
    (注意:
    r'
    前缀),否则反斜杠在文字字符串中是特殊的,特别是
    u'\U0001F385'
    不是10个字符;这是一个。

    我遇到了与您相同的问题,即我有一些实用程序模块,可能对解决多个project euler问题有用,每个project euler问题都有自己的目录

    最初,我将实用工具文件夹放入
    sys.path
    中,如下所示:

    它感觉很脏,但它起作用了(注意:我甚至在这里使用了相对路径!)

    或者,您可以在与
    isPrime.py
    相同的目录中创建:

    from distutils.core import setup
    
    NAME = 'isPrime'
    setup(name=NAME, version='0.0.1', py_modules=[NAME])
    
    并安装您的实用程序模块:

    $ python setup.py install
    
    之后,您可以在任何脚本中使用它:

    from isPrime import isPrime
    
    如果您想使用多个实用模块;您可以将它们放入
    project\u euler\u utils
    目录中,并将其作为Python包安装。将
    setup.py
    沿
    project\u euler\u utils
    目录放置:

    from distutils.core import setup
    
    NAME = 'project_euler_utils'
    setup(name=NAME, version='0.0.1', packages=[NAME])
    
    运行
    pip install project\u euler\u utils来安装它。之后