我正在尝试在Python
中创建一个应用程序,该应用程序将从各种不同计算机上的USB驱动器运行。让我们暂时假设客户端计算机安装了Python 并将其放在一边。
我的应用程序使用cherrypy
启动一个local web server
,但可以安全地假设它不会安装在运行它的计算机上。
尽可能透明地解决这个问题最好的是什么?
它应该可供非技术用户使用,他们不必担心自己安装任何依赖项。
目前,我已经使用我的应用程序打包了cherrypy source
的副本,如果程序检测到它尚未安装,则会运行setup.py
但{{1}避免任何权限问题。
这似乎不太好。
是否可以在我的应用中包含内置包?我尝试过这样的事情:
/ MyApp的/库/ CherryPy的
我从--user flag
复制了cherrypy
目录。这是预构建的,因此可能无法正常工作。我还尝试了另一种方法,我运行CherryPy archive
(创建了一个构建目录)并复制了这些文件。
/myapp/somefile.py
setup.py
从理论上讲,这应该有效......但事实并非如此。当我尝试运行服务器时(使用import myapp.libs.cherrypy as cherrypy
),它运行服务器的两个实例,这显然会导致问题。
所以,问题是:首先,我是否完全以错误的方式解决这个问题?如何为我的应用程序提供第三方软件包?
答案 0 :(得分:1)
这是由于PYTHONPATH问题。在使用您导入或外部使用的软件包时,我建议使用虚拟envs和pip作为标准。
这里有一些很棒的笔记:https://python-guide.readthedocs.org/en/latest/
如果您想导入自己的代码。我将您的PYTHONPATH(在dev_folder下面的情况下)设置为根开发目录并遵循此结构......
dev_folder \
- project_name \
- main_script.py
- helper.py
- libary1 \
- __init__.py
- lib1.py
- libary2 \
- __init__.py
- lib2.py
您显然会为库文件夹/包找到更好的名称: - )
希望这有帮助。