关于导入自定义包的Python3问题
我的项目层次结构(Python 3.5): 我正在尝试将我的项目(brp文件夹)动态转换为python包,并从任何地方调用其模块,如下所示: 从“main.py”执行:关于导入自定义包的Python3问题,python,python-3.x,import,Python,Python 3.x,Import,我的项目层次结构(Python 3.5): 我正在尝试将我的项目(brp文件夹)动态转换为python包,并从任何地方调用其模块,如下所示: 从“main.py”执行: sys.path.insert(0, "/home/pavarine/Projects/brp") print('\n'.join(sys.path)) from brp import config 这给了我: /home/pavarine/Projects/brp /home/pavarine/Projects/brp /
sys.path.insert(0, "/home/pavarine/Projects/brp")
print('\n'.join(sys.path))
from brp import config
这给了我:
/home/pavarine/Projects/brp
/home/pavarine/Projects/brp
/usr/lib/python35.zip
/usr/lib/python3.5
/usr/lib/python3.5/plat-x86_64-linux-gnu
/usr/lib/python3.5/lib-dynload
/home/pavarine/.local/lib/python3.5/site-packages
/usr/local/lib/python3.5/dist-packages
/usr/lib/python3/dist-packages
在这里,我可以清楚地看到我的项目根路径现在位于sys.path中,但是当我尝试导入“config.py”时,我遇到了一个错误:
从“main.py”执行:
sys.path.insert(0, "/home/pavarine/Projects/brp")
print('\n'.join(sys.path))
from brp import config
结果:
ImportError: No module named 'brp'
我做错了什么?通常,你可以用两种方法中的一种来构建项目 根文件夹中有一个模块
brp/
brp.py
或者您将多个模块放入一个子文件夹中:
mymod/
mymod/
__init__.py
a.py
b.py
最简单的解决方案是在现有的brp
中添加一个子文件夹brp
,并移动该子文件夹中的所有内容。导致:
brp/
brp/
__init__.py
config.py
main.py
lib/
__init__.py
Class1.py
\uuuu init\uuuuu.py
文件非常简单,因此python知道这些是子模块。有关更多信息,这里有几条指南。通常,您可以采用两种方法中的一种来构建项目
根文件夹中有一个模块
brp/
brp.py
或者您将多个模块放入一个子文件夹中:
mymod/
mymod/
__init__.py
a.py
b.py
最简单的解决方案是在现有的brp
中添加一个子文件夹brp
,并移动该子文件夹中的所有内容。导致:
brp/
brp/
__init__.py
config.py
main.py
lib/
__init__.py
Class1.py
\uuuu init\uuuuu.py
文件非常简单,因此python知道这些是子模块。有关更多信息,这里有一些指南,包括这一部分。您需要将父目录插入python路径
但是,请不要这样做。从脚本内部操纵python路径可能是危险的,使用绝对路径会使其不可移植
对于您的项目,创建另一个名为brp
的文件夹,并在那里创建一个简单的setup.py
。
应该是这样的
/home/pavarine/Projects/brp (project root)
setup.py
brp/
__init__.py # can be empty
config.py
main.py
lib/
__init__.py # can be empty
Class1.py
首先,setup.py
可以像
from setuptools import setup, find_packages
setup(
name='brp',
packages=find_packages(),
)
然后,您可以使用pip install.
从根文件夹安装软件包,并在系统上的任何位置使用它,而无需操作sys.path
如果需要,可以使用pips开发人员模式:
pip install-e。
,这将只创建符号链接,以便项目目录中的更改直接生效,而无需重新安装包。您需要将父目录插入python路径
但是,请不要这样做。从脚本内部操纵python路径可能是危险的,使用绝对路径会使其不可移植
对于您的项目,创建另一个名为brp
的文件夹,并在那里创建一个简单的setup.py
。
应该是这样的
/home/pavarine/Projects/brp (project root)
setup.py
brp/
__init__.py # can be empty
config.py
main.py
lib/
__init__.py # can be empty
Class1.py
首先,setup.py
可以像
from setuptools import setup, find_packages
setup(
name='brp',
packages=find_packages(),
)
然后,您可以使用pip install.
从根文件夹安装软件包,并在系统上的任何位置使用它,而无需操作sys.path
如果需要,可以使用pips开发人员模式:pip install-e.
,这将只创建符号链接,以便项目目录中的更改直接生效,而无需重新安装软件包