我需要在哪里放置.py文件?

时间:2016-02-07 12:44:14

标签: python

在“艰难学习python”中,作者声明我们可以导入脚本而无需使用python ex25.py。我们可以import ex25,脚本将运行。

当我这样做时,我得到:

>>> import ex25
Traceback (most recent call last):
  File "<stdin>", line 1, in <modul
ImportError: No module named ex25

作者声明它看起来像这样

Python 2.7.1 (r271:86832, Jun 16 2011, 16:59:05)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import ex25
>>> sentence = "All good things come to those who wait."
>>> words = ex25.break_words(sentence)
>>> words
['All', 'good', 'things', 'come', 'to', 'those', 'who', 'wait.']
>>> sorted_words = ex25.sort_words(words)
>>> sorted_words
['All', 'come', 'good', 'things', 'those', 'to', 'wait.', 'who']
>>> ex25.print_first_word(words)
All
>>> ex25.print_last_word(words)
wait.
>>> wrods
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'wrods' is not defined
>>> words
['good', 'things', 'come', 'to', 'those', 'who']
>>> ex25.print_first_word(sorted_words)
All
>>> ex25.print_last_word(sorted_words)
who
>>> sorted_words

似乎Python无法找到ex25。也许我需要将它放在Python 27目录中?但是,如果我需要将所有.py文件放在那里,我如何保留一个干净的目录?

当我没有得到第一个挑战(找不到文件)时,我得到:

>>> import ex25
>>> 

似乎没有发生任何事情。

5 个答案:

答案 0 :(得分:3)

在您的系统配置中,您将找到一个变量调用PythonPath(默认C:\Python27)。从命令行运行python命令时,它将检查当前目录(默认C:\Users\[Your Name])和PythonPath指定的目录。 如果你想运行你的程序,你需要:

  1. 使用ie更改为程序所在的文件夹。 cd Desktop
  2. 加入Python27文件夹
  3. 如果您使用IDLE,则无需使用控制台,只需按F5即可运行程序。

答案 1 :(得分:2)

如果要在python中导入包(例如ex25),您应该以特定的方式构建源代码:

 .
 └── ex25               # <- package name = folder name
     ├── __init__.py    # <- can be empty
     └── lib.py         # <- contains your class or code

如果您要导入此包,请执行以下操作:

>> import ex25

如果要在lib文件中导入特定类“DummyClass”,请执行以下操作:

>> from ex25.lib import DummyClass
>> class B(DummyClass):
     pass

然后继续使用您的代码。

至于python学习书籍,我建议你选择任何你觉得容易入手的东西并继续使用它。一个网站或一本书。

希望这有帮助。

编辑:(编辑问题后)

我对这本书一无所知,但看起来书中附带了一些已编写的源代码和包。尝试获取源代码,你应该找到一个名为“ex25”的文件夹..可能。

答案 2 :(得分:1)

此外,Unix变种上的当前目录,或每个shell会话一个班轮:

export PYTHONPATH=$PYTHONPATH:/some/path

或者将该行添加到.bash_profile,.bashrc,.profile或其他任何首选项,以便每次创建shell /终端时让python检查该文件夹。

或者对于Windows:

set PYTHONPATH=%PYTHONPATH%;C:\path\to\files

并使用autoexec.bat

进行设置

更好的是,以编程方式导入:

sys.path.append

另见:

答案 3 :(得分:1)

您可以通过在包含其他Python文件的目录中放置一个名为__init__.py的空文件来在Python中创建包。一旦这样做,您可以集体或单独导入该目录,或该目录中的任何python脚本,或该目录中python脚本中的任何模块或函数。也就是说,只要该目录位于Python/lib中,或者保存在导入它的Python脚本的目录中。

替代方法是将库所在的路径添加到Python的搜索路径中。你可以这样做:

from sys import path
path.append('The absolute path to your module/library')

答案 4 :(得分:1)

Python中的库创建和模块实现/导入示例。

<强>层次

.
├── package_a
│   ├── __init__.py
│   ├── mod_a.py
│   └── mod_b.py
└── package_b
    ├── __init__.py
    ├── mod_a2.py
    └── mod_b2.py

<强>目录

单个文件包含:

文件名package_a/__init__.py

#!/usr/bin/env python3

文件名package_a/mode_a.py

#!/usr/bin/env python3

MOD_A_CONSTANT = 5

文件名package_a/mod_b.py

#!/usr/bin/env python3

from package_a.mod_a import MOD_A_CONSTANT


class MyModClass(object):
        class_prop = 'This is MOD_A_CONSTANT from mod_b class: {}'.format(MOD_A_CONSTANT)

        def __str__(self):
               return self.class_prop


if __name__ == '__main__':
        test = MyModClass()
        print(test)
        # Displays: This is MOD_A_CONSTANT from mod_b class: 5

文件名package_b/__init__.py

#!/usr/bin/env python3

文件名package_b/mod_a.py

#!/usr/bin/env python3

from package_a import mod_a, mod_b

def string_args():
        resp = (
                'mod_a.MOD_A_CONSTANT: {} | '
                'mod_b.MyModClass.class_prop: {}'.format(
                        mod_a.MOD_A_CONSTANT,
                        mod_b.MyModClass.class_prop
                )
        )

        return resp
        # Displays: mod_a.MOD_A_CONSTANT: 5 | mod_b.MyModClass.class_prop: This is MOD_A_CONSTANT from mod_b class: 5


if __name__ == '__main__':
        print(string_args())

文件名package/mod_b2.py

#!/usr/bin/env python3

from package_b.mod_a2 import string_args


class MyMod2Class(object):
        def __str__(self):
                return string_args()


if __name__ == '__main__':
        test = MyMod2Class()
        print(str(test).replace('|', '\n\n'))
        # Displays: 
        # mod_a.MOD_A_CONSTANT: 5 
        #
        # mod_b.MyModClass.class_prop This is MOD_A_CONSTANT from mod_b class: 5

这应该告诉您在Python中创建,导入和实现模块和库所需的全部内容。