每当我尝试导入时requests,我都会收到错误消息No module Named requests.
import requests
Run Code Online (Sandbox Code Playgroud)
我得到的错误:
File "ex2.py", line 1, in <module>
import requests
ImportError: No module named requests
Run Code Online (Sandbox Code Playgroud) 我正在编写一个Python应用程序,它将命令作为参数,例如:
$ python myapp.py command1
Run Code Online (Sandbox Code Playgroud)
我希望应用程序是可扩展的,即能够添加实现新命令的新模块,而无需更改主应用程序源.树看起来像:
myapp/
__init__.py
commands/
__init__.py
command1.py
command2.py
foo.py
bar.py
Run Code Online (Sandbox Code Playgroud)
所以我希望应用程序在运行时找到可用的命令模块并执行适当的命令模块.
Python定义了一个__import__函数,它接受一个模块名称的字符串:
__import __(name,globals = None,locals = None,fromlist =(),level = 0)
该函数导入模块名称,可能使用给定的全局变量和局部变量来确定如何解释包上下文中的名称.fromlist给出了应该从name给出的模块导入的对象或子模块的名称.
所以目前我有类似的东西:
command = sys.argv[1]
try:
command_module = __import__("myapp.commands.%s" % command, fromlist=["myapp.commands"])
except ImportError:
# Display error message
command_module.run()
Run Code Online (Sandbox Code Playgroud)
这很好用,我只是想知道是否可能有更惯用的方法来完成我们正在使用此代码.
请注意,我特别不想使用鸡蛋或扩展点.这不是一个开源项目,我不希望有"插件".重点是简化主应用程序代码,并在每次添加新命令模块时无需修改它.
我有四个不同的文件:main,vector,entity和physics.我不会发布所有代码,只发布导入,因为我认为这就是错误所在.(如果你愿意,我可以发布更多)
主要:
import time
from entity import Ent
from vector import Vect
#the rest just creates an entity and prints the result of movement
Run Code Online (Sandbox Code Playgroud)
实体:
from vector import Vect
from physics import Physics
class Ent:
#holds vector information and id
def tick(self, dt):
#this is where physics changes the velocity and position vectors
Run Code Online (Sandbox Code Playgroud)
向量:
from math import *
class Vect:
#holds i, j, k, and does vector math
Run Code Online (Sandbox Code Playgroud)
物理:
from entity import Ent
class Physics:
#physics class gets an entity …Run Code Online (Sandbox Code Playgroud) 我有一个名为的文件tester.py,位于/project.
/project有一个名为的子目录lib,其文件名为BoxTime.py:
/project/tester.py
/project/lib/BoxTime.py
Run Code Online (Sandbox Code Playgroud)
我想导入BoxTime的tester.我试过这个:
import lib.BoxTime
Run Code Online (Sandbox Code Playgroud)
结果如下:
Traceback (most recent call last):
File "./tester.py", line 3, in <module>
import lib.BoxTime
ImportError: No module named lib.BoxTime
Run Code Online (Sandbox Code Playgroud)
任何想法如何BoxTime从子目录导入?
编辑
该__init__.py是问题,但不要忘了提及BoxTime作为lib.BoxTime,或使用:
import lib.BoxTime as BT
...
BT.bt_function()
Run Code Online (Sandbox Code Playgroud) Python安装在本地目录中.
我的目录树如下所示:
(local directory)/site-packages/toolkit/interface.py
Run Code Online (Sandbox Code Playgroud)
我的代码在这里:
(local directory)/site-packages/toolkit/examples/mountain.py
Run Code Online (Sandbox Code Playgroud)
为了运行这个例子,我写了python mountain.py,在我的代码中:
from toolkit.interface import interface
Run Code Online (Sandbox Code Playgroud)
我收到错误:
Traceback (most recent call last):
File "mountain.py", line 28, in ?
from toolkit.interface import interface
ImportError: No module named toolkit.interface
Run Code Online (Sandbox Code Playgroud)
我已经检查过sys.path,我有目录/site-packages.另外,我__init__.py.bin在toolkit文件夹中有文件向Python表明这是一个包.我__init__.py.bin在examples目录中也有一个.
我不知道为什么Python在它出现时无法找到该文件sys.path.有任何想法吗?可以是权限问题吗?我需要一些执行权限吗?
我试图找到一个关于是否最好使用的综合指南import module或from module import?我刚刚开始使用Python,我试图从最初的实践开始.
基本上,我希望如果有人能分享他们的经验,有什么喜好其他开发商,什么是避免任何的最好办法陷阱的道路?
有人能为我提供一个导入整个模块目录的好方法吗?
我有这样的结构:
/Foo
bar.py
spam.py
eggs.py
Run Code Online (Sandbox Code Playgroud)
我尝试通过添加__init__.py和执行将其转换为包,from Foo import *但它没有按照我希望的方式工作.
我想知道代码片段之间是否有任何区别
from urllib import request
Run Code Online (Sandbox Code Playgroud)
和片段
import urllib.request
Run Code Online (Sandbox Code Playgroud)
或者它们是否可以互换.如果它们是可互换的,那就是"标准"/"首选"语法(如果有的话)?
谢谢!
有时我从下载python源代码,github不知道如何安装所有依赖项.如果没有requirements.txt文件,我必须手工创建.问题是:鉴于python源代码目录是否可以requirements.txt从导入部分自动创建?
好的,我看到很多这些错误.我已经尝试过我所知道的所有事情并且尚未弄清楚这一点.
我正在开发运行python 2.5和Django 1.3的开发服务器.在解压缩tar.gz下载后,使用python setup.py install安装了Django 1.3.
一切运作良好,我很少需要运行,manage.py但我正在尝试使用新的静态文件应用程序,并遇到问题.
python manage.py collectstatic
Traceback (most recent call last):
File "manage.py", line 2, in <module>
from django.core.management import execute_manager
ImportError: No module named core.management
Run Code Online (Sandbox Code Playgroud)
好的,我有PATH问题.
从Django安装我仔细检查我的site-packages目录.
python -c "from distutils.sysconfig import get_python_lib; print get_python_lib()"
/usr/lib/python2.5/site-packages
Run Code Online (Sandbox Code Playgroud)
好吧,让我们看看我有什么,echo $ PYTHON_PATH是空的,所以我设置它
export PYTHON_PATH=/usr/lib/python2.5/site-packages/django
Run Code Online (Sandbox Code Playgroud)
仍然没有运气.让我们检查一下sys.path的含义
>>> import sys
>>> print sys.path
['', '/usr/lib/python2.5', '/usr/lib/python2.5/plat-linux2', '/usr/lib/python2.5/lib-tk', '/usr/lib/python2.5/lib-dynload', '/usr/local/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages', '/usr/lib/python2.5/site-packages/PIL', '/usr/lib/python2.5/site-packages/django', '/var/lib/python-support/python2.5']
Run Code Online (Sandbox Code Playgroud)
路径在那里,我甚至用内容创建了/usr/lib/python2.5/site-packages/django.pth
cat /usr/lib/python2.5/site-packages/django.pth
/usr/lib/python2.5/site-packages/django/
Run Code Online (Sandbox Code Playgroud)
有人知道这里发生了什么吗?
我在路径中找到了一个符号链接,但没有出现新的错误.
python manage.py …Run Code Online (Sandbox Code Playgroud) python ×10
python-import ×10
importerror ×2
module ×2
dependencies ×1
django ×1
import ×1
pythonpath ×1
requirements ×1
subdirectory ×1
syntax ×1