我是 Python (3.3.2) 的新手,使用经验很少
从....导入....
超越time
、turtle
和math
的使用。我正在研究几个 Project Euler 问题,这些问题需要一个函数来使用我的简单 isPrime(n) 函数来确定数字的素数。 isPrime(n) 函数是名为 isPrime.py 的文件中的唯一函数。
我为每个 Project Euler 都有一个单独的文件夹问题 我试图让我的代码保持直截了当,但我发现必须直接从 isPrime.py 复制我的 isPrime(n) 函数并将其粘贴到专用于每个问题的文件夹中的每个新文件中是不方便的。我有一些关于改进我的 isPrime(n) 函数的想法,我不想在进行一些修改时不得不打开几个问题文件夹只是为了更改每个文件中的行。
所以我认为在每个问题文件的顶部写下以下行是可行的:
从 isPrime.py 导入 isPrime
甚至 from isPrime import isPrime
但是,我在两种方式中都遇到了以下错误:
ImportError: 没有名为“isPrime”的模块
这是我的文件夹层次结构的基本描述:
- ProjectEuler 文件夹
- 素数函数文件夹
- isPrime.py [包含函数 isPrime(n)]
- 另一个文件.py
- yetAnotherFile.py
- 问题 X 文件夹
- 问题X.py
- something.py
- somethingElse.py
- 问题 Y 文件夹
- 问题Y.py
- something2.py
- somethingElse2.py
- 问题 Z 文件夹
- 问题Z.py
- something3.py
- somethingElse3.py
- 素数函数文件夹
我的问题是:
我需要在文件 problemX.py
、problemY.py
和 problemZ.py
的开头行中输入什么才能使用文件夹 Primality Functions
中文件 isPrime.py
中的函数 isPrime(n)
?
我在 stackoverflow 上进行了详细搜索,发现很多问题都与 Python 相关,并且难以导入文件/模块。但是,我不明白系统路径是什么,相对导入是什么,我也不知道 Python 文档找到了什么 here在告诉我。 请不要将此问题标记为与此处已有的许多 Python/导入问题重复。我正在寻找的只是将 1-3 行简单的代码放在我的文件的顶部,这样我就可以从其他文件夹导入我的函数,而不必每次都复制和粘贴我的函数是时候我尝试一个新问题了。我将非常感激最简单的回答。谢谢!
最佳答案
我遇到了与您相同的问题,即我有一些实用模块可能对解决多个项目欧拉问题有用,并且每个项目欧拉问题都有自己的目录。
最初我将实用程序文件夹作为 @user3114046 suggested 放入 sys.path
:
import sys; sys.path.insert(0, '../Primality Functions Folder')
from isPrime import isPrime
虽然感觉很脏,但确实有效(注意:我什至在这里使用了相对路径!)。
作为替代方案,您可以创建一个 simple setup.py
file在与 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_euler_utils
目录并将其安装为 Python 包。将 setup.py
放在 project_euler_utils
目录旁边:
from distutils.core import setup
NAME = 'project_euler_utils'
setup(name=NAME, version='0.0.1', packages=[NAME])
运行 pip install project_euler_utils
来安装它。在那之后;您可以在任何脚本/模块中使用它:
from project_euler_utils.isprime import isprime
注意:我使用小写名称作为 pep-8 suggests (您需要重命名您的模块和其中的函数)。
I tried using the fullest path I can think of with
"C:\Users\Owner\Documents\Primality Functions Folder"
, it gave me aSyntax Error: (unicode error) 'unicodeescape' codec can't decode bytes in position 2-3: truncated \UXXXXXXXX escape.
Windows 路径 r'C:\Users\Owner...'
使用原始字符串文字(注意:r''
前缀)否则反斜杠在文字中是特殊的字符串,特别是 u'\U0001F385'
不是 10 个字符;这是一个single Unicode codepoint U+1F385
.
关于Python 从更高/其他文件夹导入函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20821702/