Estoy desarrollando aplicaciones Django en mi máquina Windows local y luego implementándolas en un servidor Linux alojado. El formato de las rutas es diferente entre las dos y reemplaza manualmente antes de que la implementación consuma más tiempo de lo que debería. Pude codificar en función de una variable en mi archivo de configuración y declaraciones if, pero me preguntaba si alguien tenía las mejores prácticas para este escenario.Trayectorias Django, desarrollo en Windows, implementación en Linux
Respuesta
El libro de Django sugiere el uso os.path.join
(y utilizar barras en lugar de barras invertidas en Windows):
import os.path
TEMPLATE_DIRS = (
os.path.join(os.path.dirname(__file__), 'templates').replace('\\','/'),
)
Creo que esta es la mejor solución, ya que puede crear fácilmente las rutas relativas como esas. Si tiene varias rutas relativas, una función auxiliar acortará el código:
def fromRelativePath(*relativeComponents):
return os.path.join(os.path.dirname(__file__), *relativeComponents).replace("\\","/")
Si necesita rutas absolutas, se debe utilizar una variable de entorno (con os.environ["MY_APP_PATH"]
) en combinación con os.path.join
.
Tenemos una situación muy similar a la suya, y hemos estado usando diferentes rutas en la configuración, basándonos en sys.platform
. Algo como esto:
import os, sys
DEVELOPMENT_MODE = sys.platform == 'win32'
if DEVELOPMENT_MODE:
HOME_DIR = 'c:\\django-root\\'
else:
HOME_DIR = '/home/django-root/'
Funciona bastante bien - asume todo el desarrollo que se está haciendo en Windows.
Añadir
import os.path
BASE_PATH = os.path.dirname(__file__)
en la parte superior de su archivo de configuración, y luego utilice BASE_PATH
todas partes que desea utilizar una ruta relativa a su proyecto Django.
Por ejemplo:
MEDIA_ROOT = os.path.join(BASE_PATH, 'media')
(Es necesario utilizar os.path.join(), en lugar de simplemente escribir algo así como MEDIA_ROOT = BASE_PATH+'/media'
, porque Unix une directorios usando '/', mientras que las ventanas prefiere '\')
en su settings.py añadir las siguientes líneas
import os.path
SETTINGS_PATH = os.path.abspath(os.path.dirname(__file__))
head, tail = os.path.split(SETTINGS_PATH)
#add some directories to the path
import sys
sys.path.append(os.path.join(head, "apps"))
#do what you want with SETTINGS_PATH
- 1. Desarrollo de Android en Windows o Linux?
- 2. desarrollo de WordPress en Linux e implementación en el servidor de windows
- 3. Python/Django development, windows or linux?
- 4. Desarrollo de Bada en Linux
- 5. Desarrollo de C# en Linux
- 6. Desarrollo simultáneo de C++ en Linux y Windows
- 7. Django favicon.ico en desarrollo?
- 8. Django y Desarrollo virtualenv/Mejores prácticas de implementación
- 9. Desarrollo de "Sistemas de archivos" para linux, mac, windows
- 10. Cambiar a Linux para el desarrollo de Windows, ¿mala idea?
- 11. Entorno de desarrollo de Windows Windows preferido
- 12. Implementación de Windows C# del comando dd de Linux
- 13. Google App Engine servidor de desarrollo lento en Windows pero no en Ubuntu Linux
- 14. Trayectorias Unix: ¿Funcionar oficialmente en Python para cualquier plataforma?
- 15. compilando en Windows y Linux
- 16. Building C++ en Windows y Linux
- 17. Simulador de iPhone para desarrollo web en Linux o ventana
- 18. Depuración en Linux para Windows Desarrollador
- 19. Nuevo en desarrollo web. ASP.NET o Django?
- 20. ¿Cómo sirvo CSS a Django en desarrollo?
- 21. Desarrollo de Django IDE
- 22. COFF en Linux o ELF en Windows
- 23. Implementación de la aplicación Django en nGINX
- 24. Cygwin vs Linux ¿Máquina virtual para desarrollo?
- 25. desarrollo del kernel de Linux
- 26. desarrollo de Django complementos
- 27. ¿Cómo configuro un entorno de desarrollo de Python en Linux?
- 28. Implementación de Windows Scheme/Lisp
- 29. ¿Cómo comenzar en el desarrollo de Windows?
- 30. Desarrollo de Android en Windows 7
Esta es la mejor respuesta, puede usar barras en windows y linux. Las barras invertidas fueron el mayor problema que tuve. – marr75
Es posible que desee utilizar 'posixpath.join()' en lugar de 'os.path.join(). Replace()' - hace que su intención sea clara: desea una ruta de estilo POSIX independientemente de su sistema operativo. –
@CraigTrader: es una buena idea usar 'posixpath.join()', pero eso no eliminará las barras invertidas que ya están en los componentes de ruta que se unirán (por ejemplo, de 'os.path.dirname (__ file __)' – dhobbs